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

jab*_*jab 7 linker ios cordova

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

$ 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)
Run Code Online (Sandbox Code Playgroud)

如果我Ld自己从命令行运行违规命令,我会收到"找不到文件".这是否意味着编译器失败,链接器错误只是一个红色的鲱鱼?

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

jab*_*jab 9

我终于使用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)
Run Code Online (Sandbox Code Playgroud)

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

我尝试在空文件夹中创建一个新的测试项目/private/my-new-tmp2/buildtest-ios.构建它失败了同样的错误.显然,Cordova的iOS项目和Mac OS X 10.9目录中的Ld链接器有些奇怪/private,而且我是唯一一个尝试过这个的人.(正如我所说,为Android构建工作正常.)

万一别人永远运行到同样的问题,解决的办法是建立项目/Users/me/some/directory,而不是在任何地方/tmp/private.问题解决了.