c++ - 在 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++ 做到这一点。会不会有名称修改问题?查看.so
文件以nm
确保您有正确的符号并检查它们的名称。
推荐阅读
- java - 如果类/接口具有 val 属性或具有泛型类型的函数,为什么类/接口不能以 out 作为前缀?
- python - 使用 conda-build 时,得到 'conda.exceptions.UnsatisfiableError: 以下规范被发现相互不兼容:'
- python - 无法安装 PIP (get-pip.py)
- python - 如何解决“'sqlite3.Cursor'对象没有属性'fetcha11'”?
- ios - 如何在不刷新收据的情况下检测应用内购买的退款?
- javascript - 如何使用 JavaScript 更改整个网页的字体颜色?
- c - 减去 (char *)a - (char *)0 会发生什么
- python - 如何使用 canny 找到最长的不间断边缘?
- swift - Flurry - 自定义事件
- python - Python VS 代码占用太多内存并且需要很长时间才能自动完成