2012-06-07 116 views
9

權這已經成爲我一直在尋找它2天的權利疼痛似乎並不能解決這個問題。這是我得到的錯誤。用於建築的ARMv7未定義的符號:「_SCNetworkReachabilityCreateWithAddress」

Undefined symbols for architecture armv7: 
"_SCNetworkReachabilityCreateWithAddress", referenced from: 
    +[Reachability reachabilityWithAddress:] in Reachability.o 
"_SCNetworkReachabilityCreateWithName", referenced from: 
    +[Reachability reachabilityWithHostName:] in Reachability.o 
"_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from: 
    -[Reachability stopNotifier] in Reachability.o 
"_SCNetworkReachabilityScheduleWithRunLoop", referenced from: 
    -[Reachability startNotifier] in Reachability.o 
"_SCNetworkReachabilitySetCallback", referenced from: 
    -[Reachability startNotifier] in Reachability.o 
"_SCNetworkReachabilityGetFlags", referenced from: 
    -[Reachability connectionRequired] in Reachability.o 
    -[Reachability currentReachabilityStatus] in Reachability.o 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我已經加入SystemConfiguration.framework,它似乎並不想爲這個錯誤就不會消失,用它做任何事情。我看了很多相同的問題,但很多人都確認了任何答案。這種剛剛在週末沒有人碰過它的時候發展起來。任何人都可以幫忙

編輯 忘了補充這一點。

LD:警告:忽略文件/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks//SystemConfiguration.framework/ SystemConfiguration,在文件中缺少所需的體系結構的ARMv7

編輯

右鍵感謝@gaige我發現了一個問題;在SystemConfiguration.framework之前有一個額外的斜槓,不應該在那裏。我已經刪除了框架並重新添加,但沒有幫助。我怎樣才能刪除這個額外的斜線?

+0

在框架路徑中有一個奇怪的額外斜槓,這可能會影響(或不),你可以刪除並重新添加框架?我的框架副本肯定有v6和v7,所以應該沒問題。 – gaige

+0

@ gaige我已經刪除並重新添加了框架,並且斜線仍然存在任何方法我可以刪除該斜線,因爲我試圖通過終端訪問該文件,現在它不起作用,但沒有它。 – Popeye

+1

UNIX系統通常不會因爲額外的斜槓而失敗。我想這是可能的。你能證實有問題的文件確實有兩種體系結構嗎?運行'lipo -info/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks // SystemConfiguration.framework/SystemConfiguration' – Nate

回答

8

通常情況下,,額外的斜線不會遺漏類似UNIX的構建過程。

但是,您確實需要確保架構位於構建嘗試使用的框架文件中。

lipo -info /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer‌​/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks//SystemConfiguration.framework/Sy‌​stemConfiguration 

你應該看到輸出類似這樣:

Architectures in the fat file: SystemConfiguration are: armv6 armv7 

如果你不這樣做,你的項目很可能建立鏈接到要做到這一點,在命令行中使用lipo -info命令SystemConfiguration.framework的錯誤版本。你的機器上有多個版本的框架。所以,我會驗證您在項目中使用的框架路徑(即SystemConfiguration)。

通常情況下,我希望那個文件是這樣的(調整版本的操作系統您正在使用):

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Lib‌​rary/Frameworks/SystemConfiguration.framework 
+0

非常感謝,這真的有所幫助,我希望它能在未來幫助其他人。 – Popeye

0

我也有這個問題,約8小時用科爾多瓦項目和org.apache.cordova.network-information插件。通過上面的答案和其他幾個答案,我被鼓勵在Xcode的Project > Target > Build Phases > Link Binary with Libraries部分進行搜索,這是正確的。

雖然在SystemConfigration.framework中定義了SCNetworkReachabilityCreateWithAddress,但我無法通過系統地添加和刪除此庫和其他庫來擺脫鏈接器錯誤。

最後,我用這個插件創建了一個新項目,並且像原來一樣複製了框架星座。現在它正在工作。

結論:

  • 如果可能的話,創建具有必要的擴展一個新的項目,並從中複製星座。它可能有幫助。
  • 有時,一個圖書館太多,所以取消選中它。有時候是相反的。
  • 要深入瞭解,請按照上述傑出解答中的描述檢查SystemConfiguration.framework。它可能與目標架構不匹配。此外,檢查包含路徑的構建中的奇怪字符。
相關問題