Xcode 10(iOS 12)不包含libstdc ++ 6.0.9

时间:2018-06-05 07:47:26

标签: ios xcode10 ios12

我从Apple下载最新的Xcode,但我发现无法搜索名为“libstdc ++ 6.0.9”的库。 cant search libstdc++

14 个答案:

答案 0 :(得分:39)

libstdc ++在5年前被弃用了。 Apple最近的平台(tvOS和watchOS)不支持它。

支持已从iOS 12.0 Simulator运行时中删除,但它仍保留在iOS 12.0(设备)运行时中,以便与运送应用程序二进制兼容。

您应该通过将CLANG_CXX_LIBRARY构建设置(" C ++标准库")设置为libc ++来更新项目以使用libc ++而不是libstdc ++。

如果您有任何依赖于libstdc ++。tbd的静态库,您现在可以通过从Xcode 9.4中的SDK(以及iOS模拟器运行时中的libstdc ++。*。dylib)复制文件来解决它,但这不是长期解决方案。您应该联系这些库的提供者并请求使用libc ++构建的版本。

答案 1 :(得分:20)

您可以从旧Xcode(9.4)复制它。它应该工作。

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/

答案 2 :(得分:17)

在iOS 12中删除了

libstdc++

我希望我在推特上有比苹果工程师更好的资源,但这就是我所拥有的。

  

@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

编辑:这是一个更好的来源,Xcode 10补丁说明

  

使用libstdc ++构建时不推荐使用Xcode 8,并且在定位iOS时Xcode 10不支持。 C ++项目现在必须迁移到libc ++,并建议设置iOS 7或更高版本的部署目标。除了更改C ++标准库构建设置外,开发人员还应审核硬编码链接器标志和目标依赖项,以删除对libstdc ++的引用(包括-lstdc ++, - lddc ++。6.0.9,libstdc ++。6.0.9.tbd和libstdc ++。6.0。 9.dylib)。还需要针对libc ++重建项目依赖项,例如针对libstdc ++构建的静态归档。 (40885260)

答案 3 :(得分:10)

Xcode 10取消内置lib的libstdc ++库 所以我们应该手动将文件复制到lib中。

将文件:(libstdc ++。6.0.9.tbd)和(libstdc ++。6.tbd)复制到:

/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 

(请注意区分“ iPhoneOS”和“ iPhoneSimulator”)

清理xcode并重建它。

Here是文件。

答案 4 :(得分:9)

来自Xcode 10 Beta 2 release notes,并且适用于所有将来的Xcode版本:

  

Xcode 8不推荐使用libstdc ++构建,并且在以下情况下Xcode 10不支持构建   定位到iOS。 C ++项目现在必须迁移到libc ++,并建议设置一个   iOS 7或更高版本的部署目标。除了更改C ++标准库的构建设置外,   开发人员应该审核硬编码的链接器标志和目标依赖项,以删除引用   到libstdc ++(包括-lstdc ++,-lstdc ++。6.0.9,libstdc ++。6.0.9.tbd和libstdc ++。6.0.9.dylib)。   还需要对项目依赖项(例如针对libstdc ++构建的静态归档文件)进行依赖   针对libc ++进行重建。 (40885260)

Apple不太可能再次支持libstdc ++。

答案 5 :(得分:4)

更新到xcode 10后,我也遇到了同样的问题。我已经从https://github.com/Kila2/libstdc-.6.0.9.tbd下载libstdc ++。6.0.9.tbd和libstdc ++。6.tbd解决了这个问题。

然后将这些文件复制到我的项目文件夹中。 之后,我按照以下步骤在链接框架和库中添加了这些库: 项目>目标>常规>链接的框架和库,单击(+)>单击“添加其他”>导航到“打开文件”中的项目文件夹,然后选择这些库并添加。

现在运行项目,它将完美运行。

答案 6 :(得分:3)

因为苹果在Xcode 10.0中删除了libstdc ++,所以如果要解决此问题,可以尝试将文件手动复制到lib。

1。iPhoneOSiPhoneSimulator文件

将文件:libstdc++.6.0.9.tbdlibstdc++.6.tbdlibstdc++.tbd复制到:

  • /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文件

将文件:libstdc++.6.0.9.dyliblibstdc++.6.dyliblibstdc++.dylib复制到:

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

答案 7 :(得分:2)

对我来说-l {stdc ++。6“在pod install期间被添加 我在“ Pods / Target \ Support \ Files / Pods-SomeTarget / Pods-SomeTarget.debug.xcconfig”中找到了它

要解决此问题,可以在Podfile中使用post_install处理程序:

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

答案 8 :(得分:1)

Jeremy Huddleston红杉的回答为我提供了解决此问题的方向。因此,在继续之前,请确保您已阅读他的答案。

即使在项目中更新了C ++库之后,您也可能会遇到链接错误,其中Xcode无法将您的项目与此libstdc ++ lib链接。

解决方案是-如果您的项目结构包含libstdc ++,则它可能会变成红色,因为Xcode找不到它的引用。如果您从项目结构中删除该条目并改为添加新的lib(libc ++),那很好。

答案 9 :(得分:0)

从旧的Xcode(9.4)复制可在物理iOS设备上使用。 对于import cv2 import os folder_path = '' for path in os.listdir(folder_path): imgpath = os.path.join(folder_path, path) frame = cv2.imread(imgpath, 1) cv2.imshow('Window', frame) cv2.waitKey(3000) if key == 27: cv2.destroyAllWindows() break 的模拟器问题。好像苹果删除了对模拟器的兼容性支持。只需下载iOS 11.4模拟器即可在其上运行。

答案 10 :(得分:0)

对于模拟器,只需从 链接的框架和库 中删除libstdc ++。6.0.9.tbd。

答案 11 :(得分:0)

您应该从xcode项目中的其他链接器标记中删除libstdc ++

检查此: enter image description here

答案 12 :(得分:0)

我能够通过将必需的文件从9.4平台库和运行时复制到9.4复制到10.1来解决构建问题。但这只能通过模拟器解决问题。 在物理设备上运行时,我的应用仍然在启动时(启动屏幕)卡住。

答案 13 :(得分:0)

这将起作用。不要将.dylib文件从/ usr / lib复制到simruntime。

要从Xcode 9.4.1复制到Xcode 10.2.1的文件和路径列表

A)复制文件:libstdc ++。6.0.9.tbd和libstdc ++。6.tbd和libstdc ++。tbd

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

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

B)复制文件:libstdc ++。6.0.9.dylib和libstdc ++。6.dylib和libstdc ++。dylib

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

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