2015-12-29 18 views
0

我想將一組谷歌boost庫作爲OS-X私有框架打包在一起,並且慘敗。如何使用Xcode將多個dylib作爲單個OS-X框架打包

我成功地在Mac上使用boosts build-tools(b2,bjam)來構建我需要的boost庫的靜態lib(.a)和動態lib(.dylib)版本。

我在Xcode中創建了一個框架目標(配置爲私有框架)。我將它與我需要的7個dylib相關聯,並且我設法將Headers複製到位,並將實際的dylib複製到框架的可執行文件目錄中,以便將它們與新的「boost」框架結合在一起。

但是,框架的「頂部」動態庫 - (在飲食中命名爲「boost」)不會導出這7個庫中的任何符號。

所以我可以構建我的框架 - 但不使用它。

我發現一個嘗試自動(使用腳本)創建一個iOS「框架」(與內部靜態庫)從boost,但此腳本是舊的,不適用於以後的升壓版本,也 - 它不是一個Xcode項目,只是一個腳本。

我試圖找到如何通過我的「boost」動態庫重新導出鏈接的.dylibs的符號,但無法理解如何。

想法任何人? 我真的很沮喪。

回答

0

嘛,不是沒有汗水和淚水,我終於得到它的工作,這裏涉及到的技巧。 做所有我在原來的問題中提到的事情後,你還必須:

  1. 在構建的設置,找到「再出口庫名稱」,並添加dylibs,命名爲喜歡這樣的:boost_iostreams boost_locale boost_regex boost_signals boost_system boost_thread boost_filesystem(此花了一天 - 爲什麼你需要刪除「lib」和「.dylib」以及重新導出dylib意味着什麼)。
  2. 在集結階段,編譯前添加一個運行腳本階段,(你可以將其命名Run Script - Fix boost dylibs,並添加下面的腳本(可能需要根據您放置您的升壓build目錄)

    #變化! /斌/慶典

    src_boost_dylib_dir = $ SRCROOT /../../../ boost_1_59_0_lib/dylib

    dest_boost_dylib_dir = $ CONFIGURATION_BUILD_DIR/$ EXECUTABLE_FOLDER_PATH

    boost_dylibs =(libboost_filesystem.dylib libbo ost_iostreams.dylib libboost_locale.dylib libboost_regex.dylib libboost_signals.dylib libboost_system.dylib libboost_thread。dylib)

    for bdl in「$ {boost_dylibs [@]}」;做

    echo Fixing boost dylib:$bdl 
    \#at runtime, 'boost' loads its re-exported dylibs for other clients (such as AP) linked to boost. To find them, it must look in the same directory where boost is. 
    install_name_tool -id @loader_path/$bdl $src_boost_dylib_dir/$bdl 
    \# make all dependent boost dylibs also relative to @loader_path, so that they can find each other in runtime. 
    
    dependencies=`otool -L $src_boost_dylib_dir/$bdl | grep "^\slibboost_" | awk -F' ' '{ print $1 }'` 
    for dependency_dylib in "${dependencies[@]}"; do 
        if [ "${dependency_dylib}" == "" ]; then 
         continue 
        fi 
        echo Dependency:$dependency_dylib 
        install_name_tool -change $dependency_dylib @loader_path/$dependency_dylib $src_boost_dylib_dir/$bdl 
    
    done 
    

  3. 如問題,增加一個拷貝文件建立階段,聯動階段之後,到dylibs複製到「可執行文件」目錄,所以他們居住與內置產品(增強dylib)。

  4. 之後,複製另一個運行腳本階段,稱爲Run Script - Create symlink to reexported dylibs。添加以下腳本:

    #爲框架頂層的所有重新導出的dylib創建符號鏈接。它們也必須與框架目錄相關。 cd $ CONFIGURATION_BUILD_DIR/$ WRAPPER_NAME ln -Ffsv版本/當前/ libboost _ *。dylib。

你應該完成。

相關問題