macos - OS X 运行时链接器发现错误的 lib 版本

标签 macos linker hdf5

我有一个从我的 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。相同的库但不同的版本。

你可以:

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

  2. 升级你的 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/

相关文章:

windows - 无法将 Windows 上的 OpenCL 与 GHC 链接起来

c++ - 未定义对类构造函数的引用,何时正确定义?

c - 如何使数据库大小超过 256 字节 [链接器文件 - MPLAB]

tensorflow - Keras:加载由多个 GPU 生成的检查点权重 HDF5

python - 从 HDF5 文件中删除数据集属性

xcode - Mac App 无法在 Xcode 之外运行,库丢失了吗?使用库 ORSSerial

Python - unicode 字符串元组,编码错误

php - 对脚本 '/path/to/script.php' 的访问已被拒绝(请参阅 security.limit_extensions)

python - 如何将多个 NumPy 数组输入 Keras 中的深度学习网络?

objective-c - NSTextView,绑定(bind)和显示 NSString