【问题标题】:Including fftw in an idl call_external c++ shared library在 idl call_external c++ 共享库中包含 fftw
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多