Я делаю разделяемую библиотеку 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 Я был маппетом: я не включил немного кода для одной функции, это был неопределенный символ ... Я не узнал его, так как он имелдо и после исправления.Спасибо за вашу помощь!