2017-04-11 123 views
10

我有一個帶2個體繫結構片(armv7,arm64)的胖靜態庫。 我試圖使它與swift一起工作,並將其包裝到Cocoa Touch Framework中。在可可觸摸框架中包裝靜態庫

我做什麼:

  1. 創建可可觸摸框架項目
  2. 將.A靜態庫頭
  3. 設置OTHER_LDFLAGS-all_load
  4. 設置ONLY_ACTIVE_ARCHNO
  5. 設置VALID_ARCHSARCHSarmv7arm64
  6. 與發佈構建配置構建從DerivedData /../../產品
  7. 搶.framework文件/

當我把這個.framework到我迅速的項目,加入到嵌入式二進制文件一節中我針對一般設置,導入框架並使用其中的一個類,我得到undefined symbols for architecture arm64undefined symbols for architecture armv7

編輯:
不知道它是否有幫助,但我注意到,靜態庫的大小約爲34MB,但生成的.framework的大小約爲12MB。

編輯2:
我在靜態庫和生成的動態庫上運行nm -arch arm64 -g myLibraryName。動態庫不包含靜態庫具有的所有符號。看起來像XCode構建過程剝離了很多。

+0

爲了說明您是否想要在您的框架中分發該庫?你只是想能夠在你的框架內使用庫,或者你是否也試圖將庫展示給嵌入框架的應用程序?最後有一個'.dylib'版本可用的靜態庫? – tdbit

+0

@tdbit我想將靜態庫包裝到Cocoa Touch Framework,因爲我想用swift。如你所知,swift不支持靜態庫。不,'.dylib'不可用。 – tailec

+0

確保您正在創建圖書館。請查看以下鏈接以獲取創建動態框架的正確方法。 > https://www.insert.io/frameworkios8xcode6/ > https:// possiblemobile。com/2016/08/ios-frameworks-part-2-build-and-ship/ – pdubal

回答

3

我想你也忘了補充:

項目 - >目標 - >構建階段 - >鏈接二進制與圖書館: 加+的:libz.dyliblibz.tbd (由於Xcode 7的*.dylib文件是now *.tbd文件)

請務必同時清理該文件夾:/User/yourname/Library/Developer/XCode/DerivedData

P.S:如果你想你也應該能夠通過添加參數-lz添加libz.tbd「其他鏈接器標記」構建設置

+0

謝謝,但它不起作用。我認爲問題是鏈接器不會將所有符號添加到生成的動態庫。我剛剛用'nm'命令進行了檢查。我的設置是:'Druing Copy' - ''No'','Strip Linked Product''''','Strip Style'''''' Debugging Symbols','死代碼剝離' - '是'。我試圖將'Dead code stripping'設置爲'No',但框架不能編譯。 – tailec

+0

順便說一句,靜態庫是舊的webrtc構建與C++代碼中的一些自定義更改,如果有幫助。但是,這個靜態lib在舊的Obj-C項目中工作正常。 – tailec

+0

很奇怪,也許你只是知道它,如果它可能是有用的,看看官方webrtc/IOS [鏈接](https://webrtc.org/native-code/ios/),尤其是設置部分.. –