OS X运行时链接程序查找错误版本的lib

时间:2011-02-26 10:09:51

标签: macos linker hdf5

我从我的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无法启动)。

1 个答案:

答案 0 :(得分:0)

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

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

你可以:

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

    < / LI>
  2. 升级你的xcode(你有哪个版本?还有哪个osx版本?)。这会升级你的库和pyTables(小心,最新的不是最稳定的)

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

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

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

    这样你的图书馆链接到某个版本的图书馆(注意!我不记得确切的细节,但我可以把它们挖出来)。

    我希望这会有所帮助。

    BR,

    的Juha