【发布时间】:2019-05-17 12:01:38
【问题描述】:
我正在制作一个 c++ 共享库,以包含在 linux 上的 IDL 程序中。我正在使用 call_external ,一切正常。但是,我习惯于在我希望包含在库中的代码中动态链接 fftw。该代码可以很好地编译成一个库文件,但是当我尝试运行它时,idl 程序崩溃并出现错误“符号查找错误..未定义符号:fftw_plan...”
我怀疑这是由于动态链接在共享库中不起作用,但不知道如何处理。我查看了 fftw 文档和 IDL 帮助。我试过用谷歌搜索这个主题,但它有点小众。
所以在我的 makefile 中,我使用 'FFTWFLAG=-lfftw3 -lm' 链接共享库 并使用
制作库文件OneTurn.so: $(OBJECTS)
$(CC) $(INCFLAGS) $(LDFLAGS) $(FFTWFLAG) -o OneTurn.so $(OBJECTS)"
然后我用 idl 调用 c++ 库
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 的东西,一切都会按预期工作。
更新
我必须使用-Wl,-lfftw3,lm 将 fftw 链接器参数传递给共享库。
现在可以编译并运行,但是 fftw 代码仍然不起作用!正在努力...
感谢您迄今为止的回答和建议!
更新 2
我是个布偶:没有为一个函数包含一点代码,那是未定义的符号……我没认出它,因为它有一个前后修复。感谢您的帮助!
【问题讨论】:
标签: c++ fftw idl-programming-language