为什么链接器链接静态库有错误?iOS版

Yar*_*kov 29 objective-c static-libraries static-linking ios swift

我将混合语言框架链接到项目时遇到问题.

1)我使用Swift和Objective-C类创建框架.

2)主逻辑存储在Swift文件中.例如,带有调用NSLog的方法的类("调用Swift日志").

3)Objective-C文件有一个类,它有一个方法,我创建一个Swift类的实例并调用Swift-log方法.

4)我将此框架与我的Objective-C项目相关联,我可以在此项目中调用我需要的所有内容,但是当我想构建此项目时,我收到错误" linker command failed with exit code 1 (use -v to see invocation)"

并警告:

ld: warning: Could not find auto-linked library 'swiftFoundation'

ld: warning: Could not find auto-linked library 'swiftDarwin'

ld: warning: Could not find auto-linked library 'swiftCoreFoundation'

ld: warning: Could not find auto-linked library 'swiftCore'

ld: warning: Could not find auto-linked library 'swiftCoreGraphics'

ld: warning: Could not find auto-linked library 'swiftObjectiveC'

ld: warning: Could not find auto-linked library 'swiftDispatch'

ld: warning: Could not find auto-linked library 'swiftSwiftOnoneSupport'

我也看到了导入空Swift文件的解决方案,但是必须在没有任何垃圾的情况下制作项目.

Nat*_*han 73

显然,对于纯Objective-c项目,您需要将此$(TOOLCHAIN_DIR)/ usr/lib/swift/$(PLATFORM_NAME)添加到目标的库搜索路径中.当我将一个以swift编写的库包含在objective-c中的项目中时,这对我有用

  • 这很好用!对于任何想知道如何做到这一点的人;在文件浏览器中单击您的xcode项目->在“目标”下选择目标->选择“构建设置”标签->搜索“库搜索路径”并添加$$(TOOLCHAIN_DIR)/ usr / lib / swift / $ (PLATFORM_NAME)`进入调试和发布部分。 (4认同)
  • 不幸的是,当将Swift 5与Xcode 10.2一起使用时,此技巧似乎已停止工作-可能是因为现在存在系统范围的iOS 12.2的Swift库。 (4认同)
  • 对于那些不熟悉Xcode的人,请确保已选择“全部”并且它是蓝色,否则您可能找不到图书馆搜索路径 (2认同)

Hus*_*urd 42

  1. 在Xcode中打开ios / YourAppName.xcodeproj
  2. 在左侧的项目浏览器中,右键单击您的应用程序名称,然后单击新建文件…。
  3. 为项目创建一个空的Swift文件(添加时请确保选择了“您的应用名称”目标)
  4. 当Xcode询问时,按Create Bridging Header,然后不要删除Swift文件。重新运行您的构建。

这应该解决问题

  • Xcode 不询问“创建桥接头”,Xcode 版本:12.4 (4认同)
  • 是的,如果您对Swift 5 / Xcode 10.2 / Mac OS 10.14.4 / iOS 12.2.2有问题,请使用此功能 (3认同)
  • 令人难以置信...我什至不知道这到底做了什么,但我尝试了它并解决了我的问题。斯威夫特 5 / Xcode 10.2 / Mac 操作系统 10.14.6 (3认同)
  • 如果我已经有一个现有的桥接头并且问题仍然存在怎么办?我正在“MacOS Mojave”和“XCode 11.3.1”上运行 (2认同)

小智 24

就我而言,这是在添加Swift Pods库之后的一个React-Native项目。也许只是步骤2可以工作:

  1. 添加一个新的Swift文件和一个Brigde标头:

1) File -> New -> File <code>文件->新建->文件</ code>

2)选择 Swift File 选择<code>快速文件</ code>

3)确认 Create Bridging Header 在此处输入图片说明

  1. 转到Build Settings并设置Always Embed Swift Standard LibrariesYES 始终嵌入Swift标准库

  • 这对我的 React Native build =&gt; RN 60.5 有用,将 cocoapods 更新到 1.8.4,然后这样做并解决了我的构建问题(也清理了构建文件夹)。 (2认同)
  • 我没有出现“创建桥接标头”步骤。它对我说“保存文件”。 (2认同)

小智 15

对于XCode 11 beta 4,库搜索路径应为:

$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
Run Code Online (Sandbox Code Playgroud)


Chi*_*for 14

  1. 右键单击项目名称并添加一个新的 swift 文件,将其保留为 File.swift
  2. 它会要求你创建一个新的桥接头接受
  3. 再次运行项目


Sav*_*een 12

我已经导出了我的统一项目。早些时候,它只是通过按创建桥接头来添加空的 swift 文件。

但最近我已将我的 xCode 更新为 12.3,但它停止工作了。

所以,尝试了一些其他的方法。

我已添加$(SDKROOT)/usr/lib/swift到构建设置 > 搜索路径 > 库搜索路径。

但它仍然不起作用。所以,我添加了相同的路径,即构建设置 > 搜索路径 > 库搜索路径。

$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)

$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)

现在它工作完美。没有得到确切的问题或解决方案,但这种方式效果很好。

我只是在构建设置 > 搜索路径 > 库搜索路径中添加了这三个

  1. $(SDKROOT)/usr/lib/swift
  2. $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)
  3. $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)

单独的TOOLCHAIN_DIR目录不起作用。如果我添加$(SDKROOT)/usr/lib/swift然后只有它工作。

  • 在Xcode 12.5中测试,`$(SDKROOT)/usr/lib/swift`需要是第一个 (6认同)
  • 谢谢,它适用于 Xcode 13.1 (2认同)

Muh*_*man 11

亚历克斯回答的更新:

就我而言,它是添加 Swift Pods 库后的 React-Native 项目。也许只有第 2 步可以工作:

  1. 添加一个新的 Swift 文件和一个 Brigde 头文件:
  1. File -> New -> File 文件 -> 新建 -> 文件

  2. 选择 Swift File 选择 Swift 文件

  3. 确认 Create Bridging Header 在此处输入图片说明

  1. 转到Build Settings并设置Always Embed Swift Standard LibrariesYES 始终嵌入 Swift 标准库


小智 9

如果您的 Xcode 版本 >=12.2

BuildSettings -> Linking -> runpath 搜索路径

并添加/usr/lib/swift作为您的第一个参数,如下所示:

在此输入图像描述


Sud*_*Plz 7

试试这个解决方法/sf/answers/3534672151/

基本上,只需在项目中添加一个虚拟swift文件,然后重新运行您的构建。

  • 您是第二个建议此解决方案的人:)。正如我在对问题描述的评论中所说,我需要没有空 Swift 文件的解决方案。 (3认同)

小智 7

如果您在将 xCode 更新到版本 12 和错误后遇到问题

无法找到或使用自动链接库“swiftWebKit”

还有两个。

只需添加$(SDKROOT)/usr/lib/swiftBuild settings > Search paths > Library search paths

希望它的帮助:)


Eri*_*ldt 7

Xcode 12.5,React Native。

更改:“库搜索路径”从 Swift-5.0 更改为 Swift-5.2在此输入图像描述


B. *_*mad 6

在 React Native 项目中对我有用的是移动$(inherited)到“构建设置”->“库搜索路径”中的列表底部

在此输入图像描述