ld:找不到-lstdc ++。6的库

时间:2018-06-27 10:34:21

标签: ios xcode macos xcode10

将Xcode版本更新为10.0 beta后,开始出现“ ld:找不到用于-lstdc ++。6的库”错误。相同的代码在Xcode 9.2中可以正常工作

还将macOS更新为10.13.5

7 个答案:

答案 0 :(得分:12)

定位iOS App时会遇到此问题。发行说明中对此进行了说明:

  

弃用通知

     

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

来源:Release Notes of XCode Beta 2

侧面说明:
您需要登录才能访问该页面。
链接可能会在下一个beta版本中中断(URL更改),但是它在Developers / Download部分中

XCode 10与其release note一起正式发布,仍然如此:

  

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

答案 1 :(得分:10)

快速的解决方案是将所有libstdc ++。*文件从旧的Xcode(9.4)复制到新的Xcode(10.x)

对于设备:

cp /Applications/Xcode9.4.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libstdc++.* /Applications/Xcode10.app/Contents/Developer/Platforms /iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib /

对于模拟器:

cp /Applications/Xcode9.4.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libstdc++.* /Applications/Xcode10.app/Contents/Developer/Platforms /iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib /

答案 2 :(得分:5)

如上所述,lstdc ++已从Xcode 10中删除。要解决此问题,

  1. 转到目标-> BuildPhases->将二进制文件与库链接

  2. 搜索lstdc ++并将其删除。

  3. 现在在使用上述“ lstdc ++”库的某些框架中可能会出现错误。现在,您必须更新或删除这些框架,以便Xcode可以成功构建它。

答案 3 :(得分:3)

  1. 如果您使用外部Makefile来构建C ++库,请添加

CXXFLAGS += -stdlib=libc++您的外部库Makefile和-stdlib=stdlibc++的已删除实例

  1. 如果没有,请忽略上述步骤,只需转到Project> Target> Link Binary with library>
    • 删除(-)libstdc ++。6.0.9.tbd
    • 添加(+)libc ++。tbd

答案 4 :(得分:0)

当我尝试进行make install时,这对我来说是失败的。相反,我运行了make install -stdlib=libc++,成功了。

答案 5 :(得分:0)

我试图编译 C 程序并得到 ld: library not found for -lc++

因为前面提到的弃用以及告诉 C++ 从旧的 mac sdk /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk 读取的解决方法

# adjust your llvm and CLT include paths to match your setup
export CPLUS_INCLUDE_PATH=/usr/local/opt/llvm/include/c++/v1:/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include
# then set correct var for compiler lib
export LIBRARY_PATH=$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/lib

fixing-cpp-compilation-bugs-for-the-mac-os-catalina-upgrade 的精彩演练

答案 6 :(得分:-1)

只需进行构建设置,将二进制文件与库链接,然后将其删除即可。它解决了我的问题。