Xcode 4.5中没有libCordova.a文件或目录

28

clang: error: 没有此文件或目录: '/Users/admin/Library/Developer/Xcode/DerivedData/__TESTING__-fzbkvdbnndieeagphtjhdndiyttl/Build/Products/Debug-iphoneos/libCordova.a'

我该如何解决缺少 libCordova.a 的问题?

align top
(来源:kerrydeaf.com)

更新:针对Simon Germain提问的问题。 align top

更新:针对Simon Germain提问的问题。我看不到“标识和类型”,我只能看到“标识”。 我正在使用xcode4.5。 align top
(来源:kerrydeaf.com)

align top

更新:针对Simon Germain提问的问题。我已经得到了标识。

align top
(来源:kerrydeaf.com)

更新:针对Samuel的问题。

align top
(来源:kerrydeaf.com)

更新:针对Simon Germain - 架构。

更新:针对james0n - armv。

align top
(来源:kerrydeaf.com)

更新:针对Simon Germain - 架构。

更新:针对james0n - armv。

 Undefined symbols for architecture i386:
   "_OBJC_CLASS_$_CDVURLProtocol", referenced from:
       objc-class-ref in AppDelegate.o
   "_OBJC_CLASS_$_CDVViewController", referenced from:
       _OBJC_CLASS_$_MainViewController in MainViewController.o
   "_OBJC_METACLASS_$_CDVViewController", referenced from:
       _OBJC_METACLASS_$_MainViewController in MainViewController.o
 ld: symbol(s) not found for architecture i386
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

更新:针对james0n - 有效的架构。

顶部对齐
(来源:kerrydeaf.com

更新:它现在已经解决了!!! 确保在Xcode中所有iOS 6的armv7和armv7s都可用。 它有效。

12个回答

18

针对您的项目,将构建设置“仅构建活动架构”设置为是。

(也许还需要将CordovaLib项目的体系结构构建设置设置为“标准(armv7、armv7s)”)


是的,我都做了。仍然出现与上面截图相同的“i386架构未定义符号”错误。 - Irishgirl
看起来它仍在尝试为 i386 架构构建,但实际上不应该这样。你是否尝试过清理并重新构建?除了检查“有效架构”外,i386 是否列在 CordovaLib 项目的“架构”设置中呢? - james0n
我已经尝试过清理和重建,但是没有成功。是的,我在有效架构中看到了i386、armv6和armv7。我该怎么办才能摆脱i386? - Irishgirl
是的,仍然是:“Undefined symbols for architecture i386”。那么关于仅构建活动架构是“是”还是“否”呢? - Irishgirl
你使用的是iOS 5还是6?我读过这篇文章,说armv6适用于3G。但我不是针对或瞄准3G。这是iPhone 4、4s和5。因此,在iOS上没有必要使用armv6吗? - Irishgirl
显示剩余5条评论

9

我遇到了和其他人一样的问题,以下是我采取的措施:

  1. 重新按照Phonegap的入门指南进行操作(包括重新下载和提取源代码)
  2. HelloWorld应用程序出现了相同的问题
  3. 清理项目
  4. 根据james0n的答案,更改'HelloWorld'和'CordovaLib'项目(而不是目标),设置如下:

架构:标准(armv7,armv7s)

仅构建活动架构:是

然后它神奇地工作了,但我认为步骤3和4起到了作用。


好的。在我重新开始之前,我应该怎么处理从Phonegap下载的2.1文件夹中的bin和CordovaLib?我知道我需要将bin拖到我的桌面上,但CordovaLib呢?我是应该让它保持原样,让终端来完成工作,还是将bin和CordovaLib一起拖到电脑上的某个地方?我已经在终端中创建了一些内容,但升级时停了下来。 - Irishgirl

4

只需要从YourProject和CordovaLib中删除armv6即可:

remove armv6 from CordovaLib and do the same for YourProject

这样做的后果是什么?显然,它仍然可以在iPhone 3GS上运行,但不能在早期版本上运行。


据我所见,Xcode 4.5中没有armv6架构?请看上面的屏幕截图。它显示:标准(armv7、armv7s)。 - Irishgirl
好的,我看到了你的CordovaLib截图,我想你的YourProject也是一样的...如果它没有起作用,我很抱歉。我曾经遇到过同样的错误信息,删除armv6就解决了。 - Samuel
你是在说Xcode 4.5和Phonegap 2.0吗?还是Xcode 4.5和Phonegap 2.1? - Irishgirl
最新版本:xCode 4.5和Phonegap 2.1。 - Samuel

4
我和你有同样的问题,部署到模拟器上是正常的,但在设备上却无法运行。建议中的解决方法对我都没用。
以下是我实际采用的有效方法:
将部署目标设置为v4.3,并在CordovaLib项目的项目设置中,将Build Active Architecture Only设置为Yes(在主项目上不需要)。
重要提示:进行Product->Clean并重新构建。

你是否成功地使用上述方法让设备工作了? - Irishgirl
这对我也起作用了...在阅读了那么多答案后,得票最少的答案居然有效。耶! - MizAkita

3
确保在右侧面板上的第一个选项卡"Identity and Type"下,CordovaLib的产品目标设置为"Relative to Built Product"。请参考下图:

enter image description here


我不确定你想表达什么意思。如上所示,我已经包含了一个屏幕截图来说明一点。你是在谈论位于最上方/右侧的Xcode“Identity”,它在“Identity”下有一个“Project Name”吗? - Irishgirl
请看上面的截图:我看不到“身份和类型”。我只能看到“身份”。我正在使用Xcode 4.5。 - Irishgirl
是的。请参见屏幕截图顶部。我得到了“Identity”。但没有“Identity and Type”。至少,CordovaLib的产品目标设置为“相对于构建产品”。 - Irishgirl
因此,库最终与主项目位于同一构建目录中以进行链接。 - Simon Germain
我仍然遇到错误。现在,对我来说阅读起来就像双倍的荷兰语。请参见上面的架构屏幕截图。 - Irishgirl
显示剩余2条评论

1

从这里http://phonegap.com/download下载Cordova安装程序。确保它与您当前使用的版本相同(例如2.0)。

然后挂载在ios目录中找到的dmg。

然后运行.pkg安装程序。

重新启动Xcode。


是的,上周我下载了phonegap 2.0并使用terminal.app安装了一个让人噩梦般的phonegap 2.0。我不会再重复这样做了。 - Irishgirl
我是说它必须重新做。不是全部,只是我提到的步骤。不需要终端,这是一个GUI安装程序。它也不会替换或执行任何有害操作。ios文件夹位于lib文件夹中。 - Vinnie
我已按照指示安装,但没有成功。仍然缺少libCordova.a。 - Irishgirl
尝试删除然后重新添加CordovaLib xcode项目。它应该在您的Documents/CordovaLib目录中。 - Vinnie
好的,如果我这样做,我应该从哪个CordovaLib中获取源代码以重新添加,还是从我删除的同一个库中重新添加? - Irishgirl
我认为它们是一样的。当我查看我的CordovaLib项目时,它来自文档目录。从同一位置删除/重新添加。 - Vinnie

1

你需要运行更新脚本,我知道这可能有点麻烦,但这是必须的。

从官方网站下载并打开Phonegap 2.1软件包。打开终端窗口,然后cd到安装目录。

首先需要创建一个新项目:

./create [project_folder_path] [package_name] [project_name]

然后需要设置库的路径。

/update_cordova_subproject [xcodeproj file]

现在打开你的项目并将部署目标设置为4.3,你就可以开始了。希望这能帮到你。

编辑:

这是我的CordovaLib项目配置。

enter image description here


好的,您怎么知道将Phonegap 2.1升级可以解决这个问题? - Irishgirl
因为我一个小时前遇到了这个问题,而且已经解决了。你需要选择 CordovaLib 项目并将架构更改为标准的,就可以通过了。我花了一段时间才想出来。在测试之前别忘了清理项目。 - ILikeTacos
好的,我稍后会升级到Phonegap 2.1。 - Irishgirl
我应该把CordovaLib放在哪里?是让它保持在附带Phonegap 2.1文件夹中不变,还是拖放到我的文档中?请给予建议。我已经达到了./create ~/admin/medicine com.helloworld Hello World的程度。 - Irishgirl
看到这个链接:http://zsprawl.com/iOS/2012/10/installing-cordovaphonegap-2-1-for-ios/,非常好,但问题是我应该把CordovaLib放在哪里? - Irishgirl
成功执行了./create ~/admin/medicine com.medicine medicine命令,但是当我输入/update_cordova_subproject medicine.xcodeproj时,出现“没有这个文件或目录”的错误。我尝试在xcode项目文件所在的位置进行操作,也尝试了在项目文件夹和目录路径/update_cordova_subproject ~/admin/medicine/medicine.xcodeproj中进行操作,但都没有成功! - Irishgirl

1
我通过从“有效架构”设置中删除armv6和i386架构来解决了这个问题。

1
同时,请确保您不要同时打开多个PhoneGap Xcode项目 - 我曾经遇到过两者之间的冲突。会出现“另一个工作区已经打开”的循环类型的错误。

我在Xcode上只有一个www文件夹,这个该怎么办呢?当我在Therminal.app上用./create创建一个PhoneGap项目时,它会在现有项目中再次创建一个新项目,这是一个坏习惯。如果我通过Therminal.app /upgrade升级,就会出现“找不到文件或目录”的错误。这可能是一直存在问题的原因吗?也许如果我清除所有现有项目并从头开始,问题就会解决?(在尝试任何操作之前,我会备份当前项目)。 - Irishgirl

1

在遇到了很多错误后,我花了很多时间才找到了解决方法。基本上是结合了以下的步骤:

  1. 从头开始使用Cordova。如果你像我一样一直在折腾它,那么它就不再是新的了。
  2. 将Cordova文件移出下载目录(我经常清理该目录...)
  3. 按照Phonegap文档中所述创建一个新项目,即将ios/bin文件夹拖到终端图标上并在终端中运行create脚本。无需运行update_cordova_subproject脚本。
  4. 在XCode中打开项目。
  5. 对于您的产品,请将iOS部署目标设置为4.3(我做了2次,分别在项目和目标构建设置中)。
  6. 对于CordovaLib.xcodeproj,在项目构建设置中将“为活动架构构建”设置为“是”。
  7. 清理并运行。

不要在任何架构列表中包含armv7s,因为它无法构建设备。

在模拟器和安装有iOS 6的iPad上进行了测试。使用Phonegap 2.1.0和XCode 4.5.1。

更新:如果您想支持iPhone 5,您需要armv7s。这需要在https://issues.apache.org/jira/browse/CB-1360中进行修复,该修复将在Cordova 2.2.0中实现。(我还没有尝试过,在一个iPad项目上工作。)


有趣!!!你是在谈论Phonegap 2.0还是2.1?或者是先使用Phonegap 2.0再升级到2.1? - Irishgirl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接