Включение fftw в общую библиотеку idl call_external c ++ - PullRequest
0 голосов
/ 17 мая 2019

Я делаю разделяемую библиотеку c ++ для включения в программу IDL на linux.Я использую call_external, и все работает нормально.Однако я привык динамически связывать fftw в коде, который я хочу включить в библиотеку.Код прекрасно компилируется в файл библиотеки, но когда я пытаюсь его запустить, программа idl вылетает с ошибкой 'ошибка поиска символа .. неопределенный символ: fftw_plan ...'

Я подозреваю, что это связано с динамическимссылка не работает в общей библиотеке, но я не уверен, как с этим справиться.Я посмотрел документацию по fftw и справку по IDL.Я попытался погуглить тему, но это небольшая ниша.

Так что в моем make-файле я связываю разделяемую библиотеку с помощью 'FFTWFLAG = -lfftw3 -lm' И создаю файл библиотеки с помощью

OneTurn.so: $(OBJECTS)    
$(CC) $(INCFLAGS) $(LDFLAGS) $(FFTWFLAG) -o OneTurn.so     $(OBJECTS)"

Затем я вызываю библиотеку c ++ из idl с помощью

IDL> a=double(1)                                                             
IDL> t=call_external('OneTurn.so', 'OneTurn', a, a, /D_VALUE, /UNLOAD,/CDECL)    
Making bunch
/usr/local/harris/idl87/bin/bin.linux.x86_64/idl: symbol lookup error: ./OneTurn.so: undefined symbol: fftw_plan_r2r_2d    

Если я не включаю материал fftw, все работает как положено.

Обновление
Мне пришлось передать аргументы компоновщика fftw в общую библиотеку с помощью -Wl,-lfftw3,lm.
Теперь он компилируется и запускается, однако код fftw по-прежнему не работает!Работая над этим ...
Спасибо за ваши ответы и предложения пока! Обновление 2 Я был маппетом: я не включил немного кода для одной функции, это был неопределенный символ ... Я не узнал его, так как он имелдо и после исправления.Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 17 мая 2019

Я недавно не делал этого с C ++.Может ли быть проблема искажения имени?Посмотрите на файл .so с nm, чтобы убедиться, что у вас есть правильные символы и проверить их имена.

...