【问题标题】:Cordova command-line build fails in /tmp on MacCordova 命令行构建在 Mac 上的 /tmp 中失败
【发布时间】:2013-12-07 01:30:19
【问题描述】:

我从命令行构建全新的 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 上进行了尝试。

【问题讨论】:

  • 检查所有路径变量是否设置正确
  • @Purus 哪些路径变量?可以链接到文档吗?

标签: ios cordova linker


【解决方案1】:

我终于使用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 上 /private 目录中的 Ld 链接器显然有些奇怪,我是唯一一个尝试过这个的人。 (正如我所说,为 Android 构建工作正常。)

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我没有使用 Xcode。我从命令行输入了这三个命令来创建一个新项目并构建它 - 没有插件或任何其他自定义。
    【解决方案3】:

    我在 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 并且一切正常!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-15
      • 2014-03-03
      • 2013-08-05
      • 2020-05-03
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2018-02-18
      相关资源
      最近更新 更多