答案 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)
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。iPhoneOS
和iPhoneSimulator
文件
将文件:libstdc++.6.0.9.tbd
和libstdc++.6.tbd
和libstdc++.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.dylib
和libstdc++.6.dylib
和libstdc++.dylib
复制到:
答案 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)
答案 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