在使用Swift静态库与Objective-C项目时出现错误

35

我需要为我的需求制作一个快捷的静态库。我已经创建了一份使用Swift和Objective-C代码的Swift静态库,并通过桥接文件包含了Objective-C文件。我能够编译Swift静态库,生成libMySwift.a文件,且没有任何错误。我使用Xcode9.3和Swift4编译库。

我将libMySwift.a包含在Objective-C项目中,并且还包含了Objective-C兼容的头文件来访问我的库。但是当我尝试编译项目时,它给出以下警告和200多个错误。

Auto-Linking library not found for -lswiftSwiftOnoneSupport
Auto-Linking library not found for -lswiftCore
Auto-Linking library not found for -lswiftQuartzCore
Auto-Linking library not found for -lswiftCoreImage
Auto-Linking library not found for -lswiftCoreGraphics
Auto-Linking library not found for -lswiftObjectiveC
Auto-Linking library not found for -lswiftDispatch
Auto-Linking library not found for -lswiftMetal
Auto-Linking library not found for -lswiftFoundation
Auto-Linking library not found for -lswiftUIKit
Auto-Linking library not found for -lswiftDarwin
Auto-Linking library not found for -lswiftCoreFoundation

如果我漏掉任何步骤或需要添加任何内容,请告诉我。


这个可以解决你的问题,它详细描述了如何修复 https://dev59.com/7lQK5IYBdhLWcg3wEbx7#54586937 - Hussam Kurd
@HussamKurd:那里有另一个答案(点赞更多),对我有用。 - joriki
6个回答

69

关于Alex的回答的更新:

我遇到了一个React-Native项目,在添加Swift Pods库后出现了问题,也许只需要步骤2:

  1. 添加一个新的Swift文件和一个桥接头文件:

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

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

3)确认创建桥接头文件 enter image description here

  1. 进入Build Settings并将Always Embed Swift Standard Libraries设置为YES Always Embed Swift Standard Libraries

1
但是,如果稍后删除那个 Swift 文件,问题仍然存在:/ - jdnichollsc
1
非常感谢,它解决了我的问题。顺便说一下,我正在尝试使用React Native构建。 - Naveen Raju
我花了两天时间尝试解决这个问题,而你救了我! - romin21
5
为什么我看不到“确认创建桥接头文件”对话框? - Tuan Nguyen
当我从Xcode 11升级到12时,我不得不再次执行此操作。 - lambinator
显示剩余3条评论

68

当我在我的pod项目中添加第一个Swift文件并将其编译为静态库后,我的演示项目也出现了相同的错误。对于我来说,解决方案很简单-只需向我的演示项目中添加空的Swift文件(之前仅使用Objective-C),这就解决了所有链接器错误。


通过创建Objective-C桥接头文件,问题得到解决。 - Antony Raphel
不错。有点优雅的解决方案。Xcode 显示为警告而非错误。这个解决方案修复了由警告引起的所有警告和错误。 - fct
我已经尝试过这个方法,但仍然遇到相同的错误。我正在尝试添加AdMob,但找不到自动链接的框架“FBLPromises”。 - Curtis

0

这个答案对我有用:将$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)添加到库搜索路径中。


0

0
我刚刚按照AlVelig的步骤进行操作,但是仍然无法构建应用程序,在花费数小时的努力之后,最终我找到了解决方法: 在“Build Setting”中,“Build Active Architecture Only”选项需要设置为“Yes”,即使是针对发布版本(原先是“No”)。
“Build Active Architecture Only”:

enter image description here


0
  1. 右键单击您的项目名称,然后选择新文件
  2. 创建一个名为File.Swift的空的“Swift文件”
  3. 它会提示创建一个桥接头文件,然后点击创建

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