2012-04-30 2 views
1

Я пытаюсь использовать цифровую библиотеку c в python, которая полагается на fftw3, используя Ctypes. Скажем, у меня есть программа, которая выглядит следующим образом:Python Ctypes и FFTW Linking

foo.cc: 
    #include <fftw3.h> 

    extern "C"{ 

    void foo(){ 
    fftw_complex *result; 
    result = fftw_alloc_complex(1024*1024*1024); 
    } 

Я тогда компилировать это с помощью:

icpc -O3 -fpic -c foo.cc -o foo.o 
    icpc -shared -o libfoo.so foo.o -lfftw3 

Когда я пытаюсь загрузить его в Python с использованием ctypes, это, кажется, не связаны должным образом:

import ctypes 
    lib = ctypes.cdll.LoadLibrary('libfoo.so') 

Python печатает:

OSError: libfoo.so: 
    undefined symbol: fftw_alloc_complex 

я был первоначально используя новую установку FFTW 3.1 создана с ./configure сделать сделать установки , но я впоследствии попытался перекомпиляции FFTW с множеством различных опций, таких как «-fPIC», как указано here. Это дает идентичное сообщение об ошибке, и теперь у меня нет идей. Эта же процедура работала для импорта других библиотек в python, которые раньше использовали внешние библиотеки, такие как GSL, поэтому я не знаю, что происходит с FFTW3. Любая помощь будет принята с благодарностью.

~ Дуг

ответ

0

По совету сотрудника, я искал и вручную удален все FFTW связанных DLL, а затем сделал и установить снова, используя правильные флаги -fpic. Кажется, скрипт fftw uninstall не полностью удаляет предыдущие версии fftw.