2011-02-26 30 views
3

我有一個從我的Python程序中調用的C++共享庫。 C++ lib用HDF5編譯,我在OS X上使用自制軟件安裝,所以它駐留在/usr/local/lib中。現在的問題是,我也已經安裝PyTables,其中包括舊版本libhdf5的,在/Library/Frameworks/EPD64.framework/Versions/Current/...OS X運行時鏈接程序查找lib的錯誤版本

我可以編譯和鏈接到我的圖書館就好了地方安裝,並otool -L確實指向/usr/local/lib/libhdf5.dylib。但是,當我嘗試從Python運行它時,存在版本不匹配錯誤。不知何故,運行時鏈接程序正在加載舊的hdf5庫。

一種解決方法是將hdf5構建爲靜態庫,但我希望找到更整潔的解決方案 - 我如何說服運行時鏈接程序使用更新的庫?我已經嘗試過設置DYLD_LIBRARY_PATH,但這只是打破了其他一切(Python和MacVim無法啓動)。

+0

我在Matlab的同樣的問題的MEX文件。我希望你會找到一個我可以回收的解決方案! – Simon

回答

0

你能提供更多信息嗎?我有幾個選擇(和問題)。

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

你既可以:

  1. 編譯您的庫(當你編譯DYLD_LIB ......)使用相同版本pyTables與pyTables庫運行程序:DYLD_LIBRARY_PATH = /修正/路/ lib目錄python myprog.py

  2. 升級你的xcode(你有哪個版本?還有哪個osx版本?)。此升級您的庫和pyTables(注意,最新的是沒有必要的最穩定的)

您也應該檢查哪些Python中,你在呼喚(定製一個或一個蘋果)。

也有可能定義一個特定的dyld的同時鏈接(你使用gcc或LD用於連接我可能會錯過一些在這裏的選項):

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

通過這種方式,您的圖書館已鏈接到特定版本的圖書館(謹慎!我不記得具體的細節,但我可以將其挖掘出來)。

我希望這會有所幫助。

BR,

尤哈

+0

似乎現在工作。不確定發生了什麼變化。沒有必要升級XCode,並且設置DYLD_LIBRARY_PATH會導致它自己的問題,所以我只會將這個粉筆記錄到魔術粉塵中。不管怎麼說,還是要謝謝你。 – krashalot