2011-09-19 48 views
2

我在我的應用程序中使用動態庫,現在我需要將此應用程序分發給用戶。我想把所有的動態庫放入捆綁包中,而不是在lib,usr/lib等中安裝動態庫,這樣就可以實現乾淨的部署並且易於維護。 問題是當我把Xcode應用程序中的dyanamic庫作爲一個不工作的框架。請幫助我如何做到這一點? 我想確保我的應用程序使用捆綁而不是系統庫中的動態庫。請指教應用程序包中的動態庫Mac os X

回答

6

不知道是否有方法可以指定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目錄/ *庫的應用程序是仍然動態鏈接到)

+0

謝謝傑里米的答覆..讓我檢查它..再次感謝一次 – batwadi

相關問題