我正在嘗試使用靜態庫(.a),我也有頭文件(沒有.m文件),但是當我添加該庫到我的目標(甚至沒有引用/導入我的項目代碼中的庫),我收到編譯時Undefined symbols for architecture armv7
鏈接錯誤。鏈接器正在抱怨那些可能不再存在於最新版本庫中的類,並且可能正在使用緩存數據?如果我創建一個空白項目並以與將其添加到我的項目中的方式完全相同的方式添加庫,則可以支持這種懷疑,因此新項目編譯時沒有問題。但另一方面,當我grep我的文件系統的類/ ivars鏈接器抱怨,我在我的靜態庫文件和我的xcuserdata
工作區文件夾中匹配。所以我想知道是否問題出現在我的項目中,我想要導入的庫,還是我嘗試將庫添加到項目中的方式?另外,爲什麼我甚至沒有從我的代碼中導入/調用庫時出現鏈接器錯誤?我正在使用XCode 4.6.1
。XCode將錯誤鏈接到緩存的庫信息而不被調用(未定義的體系結構符號)
的連接錯誤如下:
Undefined symbols for architecture armv7:
"_OBJC_IVAR_$_GenericPopupView.delegateTheme", referenced from:
-[MyListView setDelegateTheme:] in myLib.a(MyListView.o)
-[MyListView tableView:cellForRowAtIndexPath:] in myLib.a(MyListView.o)
"_OBJC_CLASS_$_SampleMarkView", referenced from:
objc-class-ref in myLib.a(MyListView.o)
"_OBJC_CLASS_$_CheckMarkView", referenced from:
objc-class-ref in myLib.a(MyListView.o)
"_OBJC_METACLASS_$_GenericPopupView", referenced from:
_OBJC_METACLASS_$_MyListView in myLib.a(MyListView.o)
"_OBJC_CLASS_$_GenericPopupView", referenced from:
_OBJC_CLASS_$_MyListView in myLib.a(MyListView.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我通過執行以下步驟中添加的庫我的目標:
- 在我的項目上單擊右鍵
- 選擇
'Add Files to "My Project"'
- 通過彈出式Finder窗口找到.a文件
- 驗證li brary路徑是在我
Target -> Build Settings -> Library Search Paths
(自動添加,當我完成步驟3) - 添加頁眉目錄
Target -> Build Settings -> Header Search Paths
- 驗證庫在
Target -> Build Phases -> Link Binary With Libraries
驗證庫通過
file
編譯armv7
上市,otool
,&lipo
(聽說圖書館也可以包括armv6s
,但我沒有看到armv6
當我用三個命令)$ file myLib.a myLib.a: Mach-O universal binary with 2 architectures myLib.a (for architecture armv7): current ar archive random library myLib.a (for architecture cputype (12) cpusubtype (11)): current ar archive random library $ otool -L myLib.a Archive : myLib.a (architecture cputype (12) cpusubtype (11)) … $ lipo -info myLib.a Architectures in the fat file: myLib.a are: armv7 (cputype (12) cpusubtype (11))
這件事情我已經試過其間的每個編譯嘗試沒有成功:
- 乾淨(蘋果)+ SHIFT + K
- 清潔生成目錄(
DerivedData
)(蘋果)項目+ Alt + Shift + K - 刪除所有
DerivedData
目錄的命令行 - 刪除和存儲庫,它的頭文件重新添加到我的項目
- 庫沒有頭
- 把庫中的一個項目,是一個目標,而不是依賴於我的項目直接
- 注意,我無法將庫添加爲在
Build Settings
Target Dependency
;我應該能夠嗎? - 我也無法將庫添加到目標的
Build Scheme
(通過的XCode菜單的Product -> Scheme -> Edit Scheme... -> Build -> +
)
- 注意,我無法將庫添加爲在
- 檢查
Build Settings
通過iOS Deployment Target
最小的iOS版本 - 無論是我的目標和圖書的iOS 6.0 刪除了除我的項目所需的所有目標搜索路徑(不包括下面顯示的新庫)(最重要的是我從鏈接器路徑中刪除了
DerivedData
);我的整個項目生成設置(不是目標的構建設置)中沒有其他的搜索路徑頭搜索路徑
$(BUILT_PRODUCTS_DIR)/usr/local/include $(SRCROOT)/../MyLibDirectory/headers
庫搜索路徑
$(inherited) $(SRCROOT)/../TargetDependencyDirectory $(SRCROOT)/../openssl/lib $(SRCROOT)/../MyLibDirectory
取消了對圖書館的所有其他實例我的機器(舊版本)
- 設置用戶定義的版本設置
USE_HEADERMAP = NO
- 新成像機器上一個新的項目結帳安裝和重複所有上述步驟
- 添加
–ObjC++
其他連接標誌(-ObjC
已經是一個鏈接標誌)本身並與在armv6
- 使用
armv6s
Valid Architecture
Build Settings
爲我的目標下,目標依賴 - 設置
Build Active Architecture Only
到Yes
- 在父項目組級別添加庫項目組對之間切換
- 從圖書館在我的項目代碼
- 在
Utilities
窗口Identity and Type
下與Location
圖書館的不同設置,演奏在XCode的右側添加對象的進口和實例選擇了庫時 - 添加通過
+
然後Add Other...
庫爲目標的Build Phases -> Link Binary With Libraries
我已經嘗試在這些和其他職位的建議步驟(只列出了這些最後兩個具有實際指導):
Xcode referencing old/removed frameworks, causing multiple interface declarations
- Undefined symbols for architecture armv7
我沒有試圖改變我所有的文件.mm(我並不需要爲以前這個庫的版本),但我有很多.m文件,我認爲可能會破壞if我改變他們所有...
任何幫助或succestions非常感謝!我真的很難搞清楚爲什麼這個新版本的庫會給我帶來麻煩。