30

将 Xcode 版本更新到 10.0 beta 后,开始出现“ld: library not found for -lstdc++.6”错误。相同的代码在 Xcode 9.2 中运行良好

还将 macOS 更新到 10.13.5

4

7 回答 7

14

定位 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)。项目依赖项(例如针对 libstdc++ 构建的静态档案)也需要针对 libc++ 重新构建。(40885260)

来源:XCode Beta 2 发行说明

旁注:
您需要登录才能访问该页面。
链接可能会在下一个 beta 版本中中断(URL 更改),但它位于开发人员/下载部分

XCode 10 正式发布了它的发行说明,它仍然是这样的:

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)

于 2018-06-27T10:43:24.963 回答
13

快速的解决方案是将所有 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。平台/开发者/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。平台/开发者/SDKs/iPhoneSimulator.sdk/usr/lib/

于 2018-12-06T04:43:45.367 回答
7

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

  1. 转到目标 -> 构建阶段 -> 将二进制文件与库链接

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

  3. 现在,您可能会在使用上述“lstdc++”库的某些框架中遇到错误。现在你要么更新那些框架,要么删除它,这样 Xcode 才能成功构建它。

于 2018-09-20T11:09:27.690 回答
5
  1. 如果您使用外部 Makefile 来构建 C++ 库,请添加

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

  1. 如果没有,请忽略上述步骤,只需转到 Project>Target>Link Binary with libraries>
    • 删除 (-) libstdc++.6.0.9.tbd
    • 添加 (+) libc++.tbd
于 2018-09-26T09:10:57.900 回答
1

当我尝试做一个make install. 相反,我跑了make install -stdlib=libc++,这成功了。

于 2019-06-02T22:51:50.097 回答
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

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

于 2021-03-21T22:52:48.650 回答
-2

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

于 2018-11-16T10:50:02.903 回答