2
我在我的應用程序中使用動態庫,現在我需要將此應用程序分發給用戶。我想把所有的動態庫放入捆綁包中,而不是在lib,usr/lib等中安裝動態庫,這樣就可以實現乾淨的部署並且易於維護。 問題是當我把Xcode應用程序中的dyanamic庫作爲一個不工作的框架。請幫助我如何做到這一點? 我想確保我的應用程序使用捆綁而不是系統庫中的動態庫。請指教應用程序包中的動態庫Mac os X
我在我的應用程序中使用動態庫,現在我需要將此應用程序分發給用戶。我想把所有的動態庫放入捆綁包中,而不是在lib,usr/lib等中安裝動態庫,這樣就可以實現乾淨的部署並且易於維護。 問題是當我把Xcode應用程序中的dyanamic庫作爲一個不工作的框架。請幫助我如何做到這一點? 我想確保我的應用程序使用捆綁而不是系統庫中的動態庫。請指教應用程序包中的動態庫Mac os X
不知道是否有方法可以指定Xcode內部,但對於我們的應用程序,我們使用包含如下代碼的構建腳本。該代碼使用Apple的install_name_tool實用程序來修改應用程序,使其不是指向/usr/lib/libsndfile.so,而是指向應用程序包中的libsndfile.so路徑。
請注意,這只是一個剪輯腳本摘錄給你一個想法;它可能會需要一些調整你的作品之前(當然,你需要修改它的除了libsndfile其他圖書館工作,如果這是你想要的):腳本運行
#!/bin/bash -e
BINARY="MyAppFolder/MyAppName"
FRAMEW_FOLDER="MyAppFolder/MyAppName/Contents/Frameworks/"
function DoInstallNameTool {
xLIB="$1"
xLIB_NAME="$2"
xBINARY="$3"
echo install_name_tool -change \"${xLIB}\" \"@executable_path/../Frameworks/${xLIB_NAME}\" \"${xBINARY}\"
install_name_tool -change ${xLIB} "@executable_path/../Frameworks/${xLIB_NAME}" "${xBINARY}"
}
for LIB in $(otool -L "${BINARY}"|grep libsndfile|cut -d '(' -f -1)
do
echo "Handling Lib: $LIB"
LIB_NAME=$(basename "$LIB")
echo " Adding ${LIB_NAME}"
cp -Rf "${LIBSNDFILE_DIR}/src/.libs/${LIB_NAME}" "${FRAMEW_FOLDER}"
DoInstallNameTool "$LIB" "$LIB_NAME" "$BINARY"
done
後,可以做一個
otool -L ./MyApp.app/Contents/MacOS/MyApp
打印出所有的共享庫的應用程序依賴,以驗證腳本的工作(或者,如果它不工作,看什麼/ usr/lib目錄/ *庫的應用程序是仍然動態鏈接到)
謝謝傑里米的答覆..讓我檢查它..再次感謝一次 – batwadi