3

我有一个从我的 Python 程序调用的 C++ 共享库。C++ 库是用我在 OS X 上使用 homebrew 安装的 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 无法启动)。

4

1 回答 1

0

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

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

您可以:

  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

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

我希望这有帮助。

兄弟,

朱哈

于 2011-03-21T22:03:01.337 回答