我有一个从我的 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 无法启动)。
最佳答案
你能提供更多信息吗?我有一些选择(和问题)。
如果我没理解错的话,你有一个使用 lib_ver_a.dyld 的库和一个使用 lib_ver_b.dyld 的 pyTables。 IE。相同的库但不同的版本。
你可以:
编译您的库以使用与 pyTables 相同的版本(编译时 DYLD_LIB...)并使用 pyTables 库运行您的程序:DYLD_LIBRARY_PATH=/correct/path/lib python myprog.py
升级你的 xcode(你有哪个版本?还有哪个 osx 版本?)。这会升级您的库和 pyTable(注意,最新的不一定是最稳定的)
您还应该检查调用的是哪个 python(自定义的还是苹果的)。
也有可能在链接时定义特定的 dyld(你使用 gcc 还是 ld 进行链接?我可能会在这里遗漏一些选项):
gcc/path/lib1.dyld myLib.c -o myLib.o
这样你的库就会链接到特定版本的库(注意!我不记得确切的细节,但我可以把它们挖出来)。
希望对您有所帮助。
朱哈
关于macos - OS X 运行时链接器发现错误的 lib 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5126268/