为什么链接器将静态库与错误链接?的iOS

时间:2018-09-27 11:51:55

标签: ios objective-c swift static-libraries static-linking

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

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

2)主要逻辑存储在Swift文件中。例如,带有调用NSLog(“ Swift log was created”)的方法的类。

3)Objective-C文件的类具有创建我的Swift类实例并调用Swift-log方法的方法。

4)我将此框架链接到我的Objective-C项目,可以调用此项目中需要的所有内容,但是当我要构建该项目时,会收到错误消息“ linker command failed with exit code 1 (use -v to see invocation) ” < / p>

和警告:

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文件的解决方案,但必须使项目没有任何垃圾。

20 个答案:

答案 0 :(得分:39)

显然,对于纯Objective-C项目,您需要将此$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)添加到目标的库搜索路径。当我包括一个为Objective-c中的项目快速编写的库时,这对我很有用

答案 1 :(得分:13)

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

这应该可以解决问题

答案 2 :(得分:10)

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

答案 3 :(得分:9)

我已经导出了我的统一项目。早些时候,它只是通过按下创建桥接头来添加空的 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 那么它就起作用了。

答案 4 :(得分:7)

尝试这种解决方法https://stackoverflow.com/a/50495316/1658268

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

答案 5 :(得分:4)

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

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

答案 6 :(得分:2)

当我不小心用Xcode首选项»组件»工具链中配置的Swift 5.0快照编译项目时,我遇到了同样的错误。

答案 7 :(得分:1)

Xcode 12.5,React Native。添加 iOS Widget 或 Apple Watch 应用导致链接错误。

更改:“库搜索路径”从 Swift-5.0 到 Swift-5.2enter image description here

答案 8 :(得分:1)

Alex答案的更新:

在我的情况下,这是添加Swift Pods库后的一个React-Native项目。也许只是步骤2可以起作用:

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

  2. 选择Swift File Select Swift File

  3. 确认Create Bridging Header enter image description here

  1. 转到Build Settings并将Always Embed Swift Standard Libraries设置为YES Always Embed Swift Standard Libraries

答案 9 :(得分:1)

如果您来自lottie-react-native install instructions,只需将use_frameworks!添加到podFile #536 (comment)

答案 10 :(得分:1)

在我的情况下,这是添加Swift Pods库后的一个React-Native项目。也许只是第2步可以起作用:

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

1)sum() <code>File -> New -> File</code>

2)选择<console>:17: error: reassignment to val sum=i+input(i); ^ <console>:20: error: not enough arguments for method sum: (input: Array[Int])Int. Unspecified value parameter input.sum() Select <code>Swift File</code>

3)确认File -> New -> File enter image description here

  1. 转到Swift File并将Create Bridging Header设置为Build Settings Always Embed Swift Standard Libraries

答案 11 :(得分:0)

https://stackoverflow.com/a/56187043/1848929就像一个饰物。

只需在您的项目上创建一个空的swift文件,然后构建您的项目。就是这样。

答案 12 :(得分:0)

@AlVelig的答案对我有用。

我的案例是Flutter Project,我添加了一个包(searchable_dropdown),该包是由Swift编写的。

输出警告为:

找不到自动链接的库'swiftObjectiveC'

找不到自动链接的库'swiftCore'

......

答案 13 :(得分:0)

我只忘记将新框架添加到我的pod文件中:)

 target 'Data' do
inherit! :search_paths
 pod 'AlamofireObjectMapper', '~> 5.2'

结束

答案 14 :(得分:0)

尝试将Lottie集成到我的React Native项目中时,为我解决的问题是使用npm卸载lottie-ios和lottie-react-native模块。

npm uninstall lottie-react-native lottie-ios

确保文件也未链接

npx react-native unlink lottie-react-native lottie-ios

我以前在尝试该方法时也没有成功,所以我的项目中也有桥接文件,因此,为了复制我的过程,请遵循建议的答案并将该文件也添加到您的项目中。

完成这些步骤之后,我继续删除了Pods文件夹,从xcproject和xcworkspace中清除了我的构建(也许其中之一就足够了)。 之后,我继续并重新安装了模块

npm i --save lottie-react-native lottie-ios@3.1.3

(确保在彩票回购中检查当前的停靠站以获取最新版本。)

重新安装模块后,将CD插入ios文件夹并运行pod install。

在Xcode中打开xcworkspace并运行您的项目(确保您的构建是干净的)。

这解决了我的问题。

祝你好运。

答案 15 :(得分:0)

XCode 11.3 beta,Swift 5.0

我只是将目标添加到Podfile中

platform :ios, '9.0' 
use_frameworks! 
inhibit_all_warnings!

def shared_pods
    # Pods for NamaIOS
    pod 'Alamofire'
    pod 'RxSwift'
end

target 'MyApp' do
  use_frameworks!

  shared_pods

end

target 'MyApp-Test' do
  use_frameworks!

  shared_pods

end

target 'MyApp-Development' do
  use_frameworks!

  shared_pods

end

答案 16 :(得分:0)

如果将xCode更新到版本12后出现问题和错误

找不到或使用自动链接的库'swiftWebKit'

还有两个。

只需将$(SDKROOT)/usr/lib/swift添加到构建设置> 搜索路径> 库搜索路径

希望其帮助:)

答案 17 :(得分:0)

对于Xcode 12.2

使用Xcode创建一个Empty Swift文件,例如名为Void.swift的文件,每个问题都将由Xcode自动解决。

答案 18 :(得分:0)

如果将Xcode 11 beta 4与迦太基结合使用时遇到此错误,请参见以下解决方法:

https://github.com/Carthage/Carthage/issues/2825

基本上,它包括创建带有修复程序的xcconfig并将其注入每个内部版本。

答案 19 :(得分:-1)

如果您的Xcode版本> = 12.2

转到

  

BuildSettings->链接->运行路径搜索路径并添加

     

/ usr / lib / swift

作为您的第一个参数,就像这样 enter image description here