在Mac上的/ tmp中,Cordova命令行构建失败

时间:2013-12-07 01:30:20

标签: ios cordova linker

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

$ 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。我可以用这个安装创建和构建一个Android应用程序,没问题。如果直接使用cordova,我会得到完全相同的行为。我在具有相同症状的两台Mac上尝试过它。

3 个答案:

答案 0 :(得分:9)

我终于使用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中创建一个新的测试项目。构建它失败了同样的错误。显然,Cordova的iOS项目和Mac OS X 10.9上Ld目录中的/private链接器有些奇怪,而且我是唯一一个尝试过这个的人。 (正如我所说,为Android构建工作正常。)

如果其他人遇到同样的问题,解决方案是在/Users/me/some/directory而不是/tmp/private中的任何位置构建项目。问题解决了。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

将我的项目放在mac上的/ var / www / PROJECT下时,我遇到了类似的问题。我收到了重复的错误以及“ ../cordova/build: Command failed with exit code 65 ”。

我收到了重复错误,因为/ var / www /也是/ private / var / www /

解决方案是将我的项目如上所述移动到/ Users / username / some-other-dir /...

然后我跑了phonegap run ios并且一切正常!