首页 > 解决方案 > 在 idl call_external c++ 共享库中包含 fftw

问题描述

我正在制作一个 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 的东西,一切都会按预期工作。

更新
我必须将 fftw 链接器参数传递给共享库-Wl,-lfftw3,lm
现在可以编译并运行,但是 fftw 代码仍然不起作用!正在努力...
感谢您迄今为止的回答和建议! 更新 2 我是一个布偶:没有为一个函数包含一点代码,那是未定义的符号......我没有认出它,因为它有一个前后修复。谢谢你的帮助!

标签: c++fftwidl-programming-language

解决方案


我最近没有用 C++ 做到这一点。会不会有名称修改问题?查看.so文件以nm确保您有正确的符号并检查它们的名称。


推荐阅读