在Mac上,Cordova命令行编译在/ tmp中失败

从命令行构build一个全新的PhoneGap应用程序时,出现连接器错误。 它创build了一堆文件,如果我在Xcode中打开创build的.xcodeproj ,它的构build就好了。 那么我的命令行环境有什么问题?

 $ phonegap create /tmp/buildtest-ios $ cd /tmp/buildtest-ios $ phonegap -V build ios [phonegap] detecting iOS SDK environment... [phonegap] Checking iOS requirements... [phonegap] using the local environment [phonegap] compiling iOS... [phonegap] Generating config.xml from defaults for platform "ios" [phonegap] Compiling app on platform "ios" via command "/private/tmp/buildtest-ios/platforms/ios/cordova/build" [error] An error occurred while building the ios project.** BUILD FAILED ** The following build commands failed: Check dependencies (1 failure) ** BUILD FAILED ** The following build commands failed: Ld /private/tmp/buildtest-ios/platforms/ios/build/emulator/HelloWorld.app/HelloWorld normal i386 (1 failure) 

如果我从命令行自己运行有问题的Ld命令,我会得到“找不到文件”。 这是否意味着编译器失败,链接器错误只是一个红鲱鱼?

这是Mac OS X 10.9上的PhoneGap 3.3.0-0.18.0。 我可以用这个安装创build和构build一个Android应用程序,没有问题。 如果直接使用cordova我会得到完全相同的行为。 我已经尝试了两个具有相同症状的Mac电脑。

我终于find了使用cordova命令行工具的答案。 Cordova有一个-d标志,比PhoneGap的-V标志更详细。 链接器失败了,像一堆错误

 duplicate symbol _OBJC_METACLASS_$_CDVTimer in: /private/tmp/buildtest-ios/platforms/ios/build/emulator/libCordova.a(CDVTimer.o) /tmp/buildtest-ios/platforms/ios/build/emulator/libCordova.a(CDVTimer.o) 

请注意,Mac上的/tmp/private/tmp的符号链接,因此它们指向同一个文件。 难怪他们是重复的符号! 那么为什么它试图包含相同的文件两次?

我试图在一个空的文件夹/private/my-new-tmp2/buildtest-ios创build一个新的testing项目。 构build它失败,同样的错误。 所以显然,Cordova的iOS项目和Mac OS X 10.9上的/private目录下的Ld链接器有些奇怪,我是唯一一个曾经尝试过的人。 (正如我所说,为Android构build工作正常。)

如果有人遇到同样的问题,解决scheme是在/Users/me/some/directorybuild立项目,而不是在/tmp/private任何地方。 问题解决了。

这可能是因为您的框架引用已损坏或指向无处。 在“框架”和“资源”下的XCode左侧,尝试重新添加自己添加的任何内容。 Cordova可能是一个你正在使用的已经更新或删除的插件SDK。

我有一个类似的问题,把我的项目下的/ var / www / PROJECT在Mac上。 我得到重复的错误以及“ ../cordova/build: Command failed with exit code 65 ”。

因为/ var / www /也是/ private / var / www /

解决scheme是将我的项目移动到/ Users / username / some-other-dir / …

然后我跑了phonegap run ios和所有工作!