错误-链接器命令失败,退出代码为1

时间:2019-10-11 10:30:39

标签: ios iphone cocoapods

我是XCode Mac和iPhone开发的新手。所以可能我在这里缺少明显的东西。

在尝试构建项目时,出现以下警告和错误。我无法弄清楚这里出了什么问题,我查看了this答案并检查了我的框架搜索路径值,并且 BuildSettings 中没有任何值。

ld: warning: directory not found for option '-F/Users/macbook/Desktop/<app_name>__main/build/Release-iphoneos'
ld: warning: directory not found for option '-F/Users/macbook/Desktop/<app_name>__main/build/Debug-iphoneos'
ld: framework not found Pods_<app_name>
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我已经好几个小时不停地跳头了,终于放弃了。

错误中提到的路径不存在,当我查看XCode项目中build文件夹的位置时,我意识到它们位于共享目录~/Library/Developer/Xcode/DerivedData中。所以我不明白为什么XCode在项目的相对路径中查找这些文件,而build文件夹不存在。

我正在使用

XCode 10.1

CocoasPod 1.5.3 1.8.4

MacOS High Sierra

注意:同一工作空间可以在另一个系统上成功构建。

编辑:

如果我将project.pbxproj从另一个系统复制到该系统上,则该计算机上的项目也将成功构建。 project.pbxproj位于*.xcodeproj文件下。

如果我选择 Generic iOS Device (通用iOS设备),该项目也会正常运行,但是一旦切换到其他任何目标设备,我都会遇到相同的错误。

编辑2:

我在folder/directory左侧的面板中看到了几个红色的框架文件。

  • Foundation.framework
  • Pods_<application_name>.framework

解决方案:

所以现在我找到了我认为是解决方法的解决方案,而不是实际的解决方案。

在项目的文件夹结构中,我看到多个红色的.framework文件。其中一些扩展名与xCode软件包中的扩展名不同。因此,我使用较新的扩展文件对其进行了更新,从而摆脱了大多数红色文件框架,仅在上面的错误中保留了一个 Pods_.framework 相同的框架。我从General部分的“库和框架”列表中删除了该框架。完成该项目后,我可以很好地运行该应用程序。

但是,我注意到Pods_<app_name>.framework文件在运行pod install之后总是重新生成。因此,每次启动新工作区时,我都必须从列表中手动删除这种不需要的依赖关系,至少可以这样说。

因此,现在我正在寻找一种纠正此问题的方法,因此不必每次都删除Pods_<app_name>.framework文件。

在寻找解决方案时,我发现了一个已关闭的 cocoapods 错误,该错误报告了较旧版本的相同问题。我丢失了线程,无法再次找到它,否则我将链接该错误。

正如答案的评论之一所述,我现在更新了椰壳足动物版本 1.8.4

修改3:

Podfile

# Uncomment this line to define a global platform for your project
# platform :ios, '7.0'
# Uncomment this line if you're using Swift
use_frameworks!

target '<app_name>' do

pod 'Google-Mobile-Ads-SDK', '~> 7.39.0'

end

6 个答案:

答案 0 :(得分:0)

根据您的评论和构建日志,我相信podfile Pods_<application_name>对您的项目不可用(已添加但未下载)。

Pod是一种在项目之间共享代码并维护版本控制的方法。 您只需要更新pod即可将其下载并添加到您的项目中。对于刚刚启动的终端应用程序,cd到项目文件夹并启动pod update(您可以参考https://freakycoder.com/ios-notes-12-how-to-update-pods-249ecf88fe57

如果您尚未安装pod,则可以前往https://guides.cocoapods.org/using/using-cocoapods.html

答案 1 :(得分:0)

每个Mac需要将Pod安装一次。 project.pbxproj中设置的配置取决于计算机上的Cocoapods版本和Xcode版本。

尝试以下操作:

1-从本地项目中删除Podfile.lock文件和Pods文件夹

2-删除“派生数据”文件夹的内容:~/Library/Developer/Xcode/DerivedData

3-运行命令:

pod deintegrate

4-运行命令

pod install

5-再次运行项目

答案 2 :(得分:0)

Xcode对于模拟器和真实设备具有不同的构建系统。因此,它将为两者生成不同的应用程序。如果您选择任何 Simulator 目标,则它将为模拟器构建应用程序;如果您选择 Generic iOS Device (通用iOS设备)或任何真实的设备目标,则它将构建不同的版本。

可能您正在使用为iOS设备构建的一些框架,所以 遵循以下步骤,

  1. 区分那些会给您带来错误的框架,然后从pod文件中删除该pod,然后运行pod install命令并删除 DerivedData
  2. 在您的系统中下载该框架的代码。
  3. 在工作区中添加框架的项目文件。为此,您可以参考thisthis

如果您不想在项目中添加整个框架代码,则可以在xcode项目中添加特定的(用于设备或模拟器)框架。 为此,请按照以下步骤操作,

  1. 打开您下载的框架项目。
  2. 选择任何模拟器目标并构建项目。
  3. 产品文件夹中获取生成的.framework文件。
  4. 将此框架添加到您的项目中,例如this
  5. 现在为模拟器构建项目。
  6. 如果要构建设备,请按照上述针对设备的步骤进行操作。

对于Google移动广告,您可以遵循this准则。将-ObjC链接器标记添加到项目的构建设置中的其他链接器标记

我希望这对您有用。

答案 3 :(得分:0)

我曾经遇到过这个问题,但是我已经用@alxlive答案的相同方式解决了它,并且有效。

由于我们已经安装了Pod,问题发生在我身上。

在那段时间里,我已经为我的项目安装了可可脚架。然后,我添加了2个新的Build Configurations

您的问题可能是相同的,因为您确实提到从其他系统复制其他project.pbxproj,这使您的项目正常进行。所以可能是这样。

通过将deintegrateinstall的容器重新打开,即可解决问题。

答案 4 :(得分:0)

在其他链接器标志中添加 -ObjC $(inherited) 修复了我的问题

答案 5 :(得分:0)

对我来说,这是因为配置名称中有一个空格,例如“开发调试”。一旦我删除了空间并将其设置为“DevelopmentDebug”,错误消息就消失了。