首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mac将.so文件链接到动态库

Mac将.so文件链接到动态库
EN

Stack Overflow用户
提问于 2016-08-12 04:26:08
回答 1查看 1.4K关注 0票数 0

我正在尝试构建一个python包,它依赖于几个库,包括boost、boost-python和fftw。我可以编译这个包而没有任何错误,但是当我尝试使用steme --help命令运行该程序时,我得到了一个错误:

代码语言:javascript
复制
2016-08-11 15:07:55,571:ERROR: ImportError: dlopen(/Users/<>/.ENV/lib/python2.7/site-packages/STEME-1.9.1-py2.7-macosx-10.11-intel.egg/stempy/_release_build/_index.so, 2): Symbol not found: __ZN5boost6python6detail13current_scopeE
  Referenced from: /Users/<>/.ENV/lib/python2.7/site-packages/STEME-1.9.1-py2.7-macosx-10.11-intel.egg/stempy/_release_build/_index.so
  Expected in: flat namespace
 in /Users/<>/.ENV/lib/python2.7/site-packages/STEME-1.9.1-py2.7-macosx-10.11-intel.egg/stempy/_release_build/_index.so

我的理解是,文件_index.so正在寻找符号__ZN5boost6python6detail13current_scopeE,但找不到它。接下来,我使用otool -L检查了哪些库链接到了_index.so文件

代码语言:javascript
复制
/Users/<>/.ENV/lib/python2.7/site-packages/STEME-1.9.1-py2.7-macosx-10.11-intel.egg/stempy/_release_build/_index.so:
    /usr/local/opt/fftw/lib/libfftw3.3.dylib (compatibility version 8.0.0, current version 8.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)

基于此,我认为发生的情况是boost-python动态库在编译期间没有正确地链接到_index.so。为了检查我是否在boost-python dylib上运行了nm -g (这些dylib是使用brew安装的,还有其他提到的依赖项)。在libboost_python.dylib文件中找到了缺少的符号:

0000000000031d08 S __ZN5boost6python6detail13current_scopeE

那么,我的下一个问题是,如何将libboost_python.dylib文件(位于/usr/local/Cellar/boost-python/1.61.0/lib)链接到_index.so文件?这能解决问题吗?有没有需要设置的编译器标志,以确保构建链接正确?

EN

回答 1

Stack Overflow用户

发布于 2016-08-12 04:58:57

在启动二进制文件时,请尝试在路径中包含/usr/local/Cellar/boost-python/1.61.0/lib。就像这样

代码语言:javascript
复制
$ export PATH=$PATH:/usr/local/Cellar/boost-python/1.61.0/lib
$ ./your-binary

库的链接就在那里,否则你不可能通过otool找到它。我认为程序没有找到共享库,因为在路径中找不到它。

这个错误看起来与windows中的"DDL not found“错误类型非常相似,可以通过在当前目录或路径中提供DDL来修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38905527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档