Xcode 10 (iOS 12) does not contain libstdc++6.0.9

本小妞迷上赌 提交于 2019-11-27 02:54:15

libstdc++ was deprecated 5 years ago. Apple's more recent platforms (tvOS and watchOS) don't support it.

Support was removed from the iOS 12.0 Simulator runtime, but it remains in the iOS 12.0 (device) runtime for binary compatibility with shipping apps.

You should update your project to use libc++ rather than libstdc++ by setting the CLANG_CXX_LIBRARY build setting ("C++ Standard Library") to libc++.

If you have any static libraries that depend on libstdc++.tbd, you can workaround it for now by copying the file from the SDKs in Xcode 9.4 (and libstdc++.*.dylib in the iOS simulator runtime), but that is not a long term solution. You should contact the provider of those libraries and request versions built using libc++.

Antigp

You may copy it from old Xcode(9.4). It should work.

cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libstdc++.* /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/

cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libstdc++.* /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/

libstdc++ is removed in iOS 12.

I wish I had a better source than an Apple engineer on Twitter, but that's all I have.

@jeremyhu PSA: libstdc++ is gone from the iOS 12.0 SDK (it is present in the runtime for binary compatibility). It's days are numbered on macOS as well. Migrate over to libc++ if you haven't already. #WWDC2018 #cplusplus

Edit: Here's a better source, Xcode 10 patch notes

Building with libstdc++ was deprecated with Xcode 8 and is not supported in Xcode 10 when targeting iOS. C++ projects must now migrate to libc++ and are recommended to set a deployment target of iOS 7 or later. Besides changing the C++ Standard Library build setting, developers should audit hard-coded linker flags and target dependencies to remove references to libstdc++ (including -lstdc++, -lstdc++.6.0.9, libstdc++.6.0.9.tbd, and libstdc++.6.0.9.dylib). Project dependencies such as static archives that were built against libstdc++ will also need to be rebuilt against libc++. (40885260)

刘俊利

Xcode 10 cancels the libstdc++ library with built-in the lib so we should copy the file to the lib by hand.

copy the file: (libstdc++.6.0.9.tbd) and (libstdc++.6.tbd) to :

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib

and

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib 

(Please note the distinction "iPhoneOS" and "iPhoneSimulator")

clean xcode and rebuild it.

Here is the file.

Taken from Xcode 10 Beta 2 release notes and applicable to all future versions of Xcode:

Building with libstdc++ was deprecated with Xcode 8 and is not supported in Xcode 10 when targeting iOS. C++ projects must now migrate to libc++ and are recommended to set a deployment target of iOS 7 or later. Besides changing the C++ Standard Library build setting, developers should audit hard-coded linker flags and target dependencies to remove references to libstdc++ (including -lstdc++, -lstdc++.6.0.9, libstdc++.6.0.9.tbd, and libstdc++.6.0.9.dylib). Project dependencies such as static archives that were built against libstdc++ will also need to be rebuilt against libc++. (40885260)

Apple will unlikely ever support libstdc++ again.

Because apple removes libstdc++ in Xcode 10.0, so if you want to solve the problem, you can try to manually copy the file to lib.

1.iPhoneOS and iPhoneSimulator file

copy the file: libstdc++.6.0.9.tbd and libstdc++.6.tbd and libstdc++.tbd to :

  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/

  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/

2.iOS.simruntime file

copy the file: libstdc++.6.0.9.dylib and libstdc++.6.dylib and libstdc++.dylib to:

  • /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib

I've faced the same issue after updating to xcode 10. I've resolved this issue by downloading libstdc++.6.0.9.tbd and libstdc++.6.tbd from https://github.com/Kila2/libstdc-.6.0.9.tbd.

then i copied these files to my project folder. After that I added these libs in Linked Frameworks and Libraries by following these steps: Project > Target > General > Linked Frameworks and Libraries click (+) > Click 'Add Other' > Navigat to your project folder in 'Open File' and select these libraries and add.

Now run the project it will run perfectly..

For me -l"stdc++.6" was added during pod install I found it in 'Pods/Target\ Support\ Files/Pods-SomeTarget/Pods-SomeTarget.debug.xcconfig'

To resolve the issue you can use post_install handler in Podfile:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == "Pods-SomeTarget”
            puts "Updating #{target.name} OTHER_LDFLAGS"
            target.build_configurations.each do |config|
                xcconfig_path = config.base_configuration_reference.real_path
                xcconfig = File.read(xcconfig_path)
                new_xcconfig = xcconfig.gsub('-l"stdc++.6" ', '')
                File.open(xcconfig_path, "w") { |file| file << new_xcconfig }
            end
        end
    end
end

Jeremy Huddleston Sequoia's answer gave me the direction to resolve this issue. So before going ahead, make sure you have read his answer.

Even after updating the C++ library in your project, you might face a linking error where Xcode is not able to link your project with this libstdc++ lib.

The solution is - if your project structure has libstdc++ included, it might have turned red because Xcode couldn't find the reference for it. If you remove that entry from the project structure and add the new lib instead(libc++), you're good to go.

Copy it from old Xcode(9.4) will work for physical iOS devices. For Simulator issues with Did find: /usr/lib/libstdc++.6.dylib: mach-o, but not built for iOS simulator. Looks like apple removed compatibility support for simulator. Just download iOS 11.4 simulator and it can be run on it.

For simulator, just remove libstdc++.6.0.9.tbd from the Linked Frameworks and Libraries.

You should remove libstdc++ from other linker flags in your xcode project

Check this :

I was able to fix the build issue by copying the necessary files from 9.4 to 10.1, both platform libs and runtime. But it only resolves the cases with simulator. My app still stucks at start (splash screen) when running on physical device.

This will work. Do not copy the .dylib files from /usr/lib to simruntime.

List of files and paths to copy from Xcode 9.4.1 to Xcode 10.2.1

A) Copy the file: libstdc++.6.0.9.tbd and libstdc++.6.tbd and libstdc++.tbd

from > Xcode9_41/Xcode9_41.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib

to > /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib

B) Copy the file: libstdc++.6.0.9.dylib and libstdc++.6.dylib and libstdc++.dylib

from > Xcode9_41/Xcode9_41.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib

to > /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib

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