“架构 i386 的未定义符号”问题
Posted
技术标签:
【中文标题】“架构 i386 的未定义符号”问题【英文标题】:Issue with "Undefined symbols for architecture i386" 【发布时间】:2014-12-19 15:09:31 【问题描述】:我们有一个 android/ios 应用程序,到目前为止它还在 Xcode 中构建。周一我们将 Xcode 升级到了 6.1.1 版。从那以后,我无法在 Xcode 模拟器中构建和运行我们的应用程序。
ld: warning: ignoring file /Users/ACCOUNTZ/Library/Developer/Xcode/DerivedData/Accountz-crbaoextdggovrahxqcivilxfgeh/Build/Products/Debug-iphonesimulator/libCordova.a, file was built for archive which is not the architecture being linked (i386): /Users/ACCOUNTZ/Library/Developer/Xcode/DerivedData/Accountz-crbaoextdggovrahxqcivilxfgeh/Build/Products/Debug-iphonesimulator/libCordova.a
Undefined symbols for architecture i386:
"_CDVLocalNotification", referenced from:
-[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
"_CDVPluginHandleOpenURLNotification", referenced from:
-[AppDelegate application:openURL:sourceApplication:annotation:] in AppDelegate.o
-[CDVInAppBrowser openInSystem:] in CDVInAppBrowser.o
-[AppDelegate application:openURL:sourceApplication:annotation:] in AppDelegate.o
-[CDVInAppBrowser openInSystem:] in CDVInAppBrowser.o
"_CDVRemoteNotification", referenced from:
-[AppDelegate application:didRegisterForRemoteNotificationsWithDeviceToken:] in AppDelegate.o
"_CDVRemoteNotificationError", referenced from:
-[AppDelegate application:didFailToRegisterForRemoteNotificationsWithError:] in AppDelegate.o
"_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
_OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
"_OBJC_CLASS_$_CDVCommandQueue", referenced from:
_OBJC_CLASS_$_MainCommandQueue in MainViewController.o
"_OBJC_CLASS_$_CDVPlugin", referenced from:
_OBJC_CLASS_$_GAPlugin in GAPlugin.o
_OBJC_CLASS_$_CDVClipboard in CDVClipboard.o
_OBJC_CLASS_$_CDVDevice in CDVDevice.o
_OBJC_CLASS_$_CDVInAppBrowser in CDVInAppBrowser.o
_OBJC_CLASS_$_CDVConnection in CDVConnection.o
"_OBJC_CLASS_$_CDVPluginResult", referenced from:
objc-class-ref in GAPlugin.o
objc-class-ref in CDVClipboard.o
objc-class-ref in CDVDevice.o
objc-class-ref in CDVInAppBrowser.o
objc-class-ref in CDVConnection.o
"_OBJC_CLASS_$_CDVUserAgentUtil", referenced from:
objc-class-ref in CDVInAppBrowser.o
"_OBJC_CLASS_$_CDVViewController", referenced from:
_OBJC_CLASS_$_MainViewController in MainViewController.o
objc-class-ref in CDVDevice.o
"_OBJC_CLASS_$_CDVWebViewDelegate", referenced from:
objc-class-ref in CDVInAppBrowser.o
"_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
_OBJC_METACLASS_$_MainCommandDelegate in MainViewController.o
"_OBJC_METACLASS_$_CDVCommandQueue", referenced from:
_OBJC_METACLASS_$_MainCommandQueue in MainViewController.o
"_OBJC_METACLASS_$_CDVPlugin", referenced from:
_OBJC_METACLASS_$_GAPlugin in GAPlugin.o
_OBJC_METACLASS_$_CDVClipboard in CDVClipboard.o
_OBJC_METACLASS_$_CDVDevice in CDVDevice.o
_OBJC_METACLASS_$_CDVInAppBrowser in CDVInAppBrowser.o
_OBJC_METACLASS_$_CDVConnection in CDVConnection.o
"_OBJC_METACLASS_$_CDVViewController", referenced from:
_OBJC_METACLASS_$_MainViewController in MainViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已经花了几个小时来弄清楚发生了什么,但这似乎超出了我的能力范围。我确实遵循了在网上找到的许多建议,但没有结果。我尝试从“构建阶段”部分添加“缺失”框架,我使用“仅构建活动架构”,我尝试将此 i386 架构添加到目标和项目的有效架构列表中。 所有这些都没有效果。
我在这里错过了什么?
【问题讨论】:
您的项目使用的是什么版本的cordova? @DawsonLoudon - 我们在 3.6.3-0.2.13 版本上运行 【参考方案1】:事实证明,我的应用程序的 Cordova 构建缺少架构 (i386)。我的“cordova.a 文件被忽略”(根据我的警告),因为事实上我在 Xcode 升级后丢失了 i386 架构设置。为了解决这个问题,我需要通过单击 Cordova.xcodeproj 文件来添加这个架构。然后我进入 Cordova(不是 Project)构建设置,我必须在其中为 Cordova Build 的 Target 和 Project 部分添加我缺少的架构。
我什至不知道这个部分的存在。因此,我多次尝试调整我的项目本身的架构(通过单击 Navigator 中的项目名称并访问构建设置选项卡),但要解决我的问题,我只需要通过单击 Cordova.xcodeproj 文件来做同样的事情。
这个link 帮助了我,所以你可能也想关注。
【讨论】:
以上是关于“架构 i386 的未定义符号”问题的主要内容,如果未能解决你的问题,请参考以下文章
架构 i386 的未定义符号:“_SCNetworkReachabilitySetCallback”