這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
突然想試試用go寫個dylib供Objective-c調用,確發現總是報無法找到庫的錯誤,無奈只好試試百度跟Google,總算是找到一個關於類似的問題的(ps:那些說改選項的就是個坑,都沒說到關鍵點)。
不甘心後面又找到種方法了,見:http://log.zyxar.com/blog/2012/03/10/install-name-on-os-x/
install_name_tool -id "@loader_path/libmyhttp.dylib" libmyhttp.dylib
使用上面的方法後就不會要再運行那段指令碼了,分發出去貌似都行了
其它方法:
具體問題要參見http://blog.csdn.net/ani_di/article/details/7078743
這裡引用其中一段:“簡單的說,可執行檔中要連結的動態庫在串連時已經寫死在可執行檔中了,這個路徑來自dylib內部。我使用otool -L 查看了dylib的路徑,是Debug/aaa.dylb,它等同於-o後面的參數。按照作者提供的方法,修改dylib的install_name即可,不過libtool命令列太複雜,加之蘋果又修改了其參數,以至於我想依葫蘆畫瓢在build完成後加個patch都不行。正要放棄之際, 發現gcc有一個install_name的選項。死馬當活馬醫,試試看。結果沒問題。修改工程的Properties -> C/C++ Build -> Settings -> MacOS X C++ Linker->Miscellaneous, 加上-install_name @executable_path/aaa.dylib參數,這樣產生的動態庫拷貝到demo的目錄下就可以用了。”
原因是找到了,但因為不熟悉xcode,一時半會兒不知道怎麼玩,只好繼續google了,終於在go的issues中找到了一個解決方案。
具體見issues https://github.com/golang/go/issues/12700
在Xcode的Build Phases中添加一個Run Script, 指令碼內容為
install_name_tool -change dy.dylib @loader_path/dy.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/MacOS/$PRODUCT_NAME"
再次運行,已經正常了,但有點,如果是給別人用的話,感覺有點坑,不知道有沒有更好的辦法,直接寫死到lib裡面,試了好多種方式,編譯出來的dylib都沒有寫死。