在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/directory
build立项目,而不是在/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
和所有工作!