我从我的Python程序中调用了一个C ++共享库。 C ++ lib是使用HDF5编译的,我在OS X上使用自制软件安装,因此它位于/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无法启动)。
答案 0 :(得分:0)
您能提供更多信息吗?我有一些选择(和问题)。
如果我理解正确,你有一个使用lib_ver_a.dyld的库和使用lib_ver_b.dyld的pyTables。即相同的库但版本不同。
你可以:
编译库以使用与pyTables相同的版本(编译时使用DYLD_LIB ...)并使用pyTables库运行程序:DYLD_LIBRARY_PATH = / correct / path / lib python myprog.py
< / LI>升级你的xcode(你有哪个版本?还有哪个osx版本?)。这会升级你的库和pyTables(小心,最新的不是最稳定的)
你还应该检查你正在调用哪个python(一个自定义的或一个苹果)。
链接时也可以定义一个特定的dyld(你是否使用gcc或ld进行链接?我可能会错过这里的一些选项):
gcc /path/lib1.dyld myLib.c -o myLib.o
这样你的图书馆链接到某个版本的图书馆(注意!我不记得确切的细节,但我可以把它们挖出来)。
我希望这会有所帮助。
BR,
的Juha