Why linker link static libraries with errors? iOS

孤者浪人 提交于 2020-01-18 05:35:07

问题


I have a problem with linking my mixed language framework to a project.

1) I create framework with Swift and Objective-C classes.

2) Main logic was stored in Swift file. For example the class with method that calls NSLog("Swift log was called").

3) Objective-C file has class that has method in which I create an instance of Swift class and call Swift-log method.

4) I link this framework with my Objective-C project, I can call all what I need in this project, but when I want to build this project I receive error "linker command failed with exit code 1 (use -v to see invocation)"

And warnings:

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'

I also saw the solution with importing empty Swift-file, but it necessary to make project without any trash.


回答1:


Apparently for pure objective-c projects you will need to add this $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) to the library search paths of your target. This worked for me when I was including a library written in swift to a project in objective-c




回答2:


  1. Open ios/YourAppName.xcodeproj in Xcode
  2. Right-click on Your App Name in the Project Navigator on the left, and click New File…
  3. Create a single empty Swift file to the project (make sure that Your App Name target is selected when adding)
  4. when Xcode asks, press Create Bridging Header and do not remove Swift file then. re-run your build.

This should fix the problem




回答3:


In my case it was a React-Native project after adding a Swift Pods library. Maybe just the step 2 can work:

  1. Adding a new Swift file and a Brigde header:

1) File -> New -> File

2) Select Swift File

3) Confirm Create Bridging Header

  1. Go to Build Settings and set Always Embed Swift Standard Libraries to YES



回答4:


For XCode 11 beta 4 Library Search Paths should be:

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



回答5:


Try this workaround https://stackoverflow.com/a/50495316/1658268

Basically just add a dummy swift file in your project, and re-run your build.




回答6:


I've got the same errors when accidentally compiling a project with a Swift 5.0 Snapshot configured in the Xcode preferences » Components » Toolchain.




回答7:


In case you encounter this error while using Xcode 11 beta 4 in combination with carthage see this workaround:

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

Basically it consists of creating a xcconfig with the fixes and inject these into each build.




回答8:


XCode 11.3 beta, Swift 5.0

I just add my targets to the 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



回答9:


If your Xcode version is >=12.2

Go to

BuildSettings -> Linking -> runpath search path and add

/usr/lib/swift

as your 1st argument like this enter image description here



来源:https://stackoverflow.com/questions/52536380/why-linker-link-static-libraries-with-errors-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!