【问题标题】:OS X runtime linker finding wrong version of libOS X 运行时链接器发现错误的 lib 版本
【发布时间】:2011-07-04 19:39:35
【问题描述】:

我的 Python 程序调用了一个 C++ 共享库。 C++ 库是用我在 OS X 上使用自制软件安装的 HDF5 编译的,所以它位于/usr/local/lib。现在的问题是我还安装了 PyTables,其中包括旧版本的 libhdf5,安装在 /Library/Frameworks/EPD64.framework/Versions/Current/...

的某处

我可以很好地编译和链接我的库,otool -L 确实指向/usr/local/lib/libhdf5.dylib。但是,当我尝试从 Python 运行它时,会出现版本不匹配错误。不知何故,运行时链接器正在加载旧的 hdf5 库。

一种解决方法是将 hdf5 构建为静态库,但我想找到一个更简洁的解决方案 - 如何说服运行时链接器使用更新的库?我已经尝试设置 DYLD_LIBRARY_PATH 但这只是破坏了其他一切(Python 和 MacVim 无法启动)。

【问题讨论】:

  • 我在 Matlab 中对 mex 文件有同样的问题。我希望你能找到我可以回收的解决方案!

标签: macos linker hdf5


【解决方案1】:

您能提供更多信息吗?我有几个选择(和问题)。

如果我理解正确,您有一个使用 lib_ver_a.dyld 的库和一个使用 lib_ver_b.dyld 的 pyTables。 IE。相同的库,但版本不同。

你可以:

  1. 编译您的库以使用与 pyTables 相同的版本(编译时为 DYLD_LIB...)并使用 pyTables 库运行您的程序:DYLD_LIBRARY_PATH=/correct/path/lib python myprog.py

  2. 升级你的 xcode(你有哪个版本?还有哪个 osx 版本?)。这会升级您的库和 pyTables(请注意,最新的不一定是最稳定的)

您还应该检查您正在调用哪个 python(自定义的或苹果的)。

也有可能在链接时定义一个特定的 dyld(你使用 gcc 还是 ld 进行链接?我可能会错过一些选项):

gcc /path/lib1.dyld myLib.c -o myLib.o

通过这种方式,您的库将链接到某个版本的库(注意!我不记得确切的细节,但我可以将它们挖掘出来)。

我希望这会有所帮助。

br,

朱哈

【讨论】:

  • 现在似乎可以工作了。不太确定发生了什么变化。无需升级 XCode,设置 DYLD_LIBRARY_PATH 会导致其自身的问题,所以我将把它归结为魔法仙尘。还是谢谢。
猜你喜欢
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多