无法在 OS X Big Sur,"ld: library not found for -lgcc_s.10.4" 上编译 C++

Cant compile c++ on OS X Big Sur, "ld: library not found for -lgcc_s.10.4"

将我的 MacBook Pro 升级到 OS X 11.1 Big Sur 后,我无法使用 gcc 编译 c++ 程序。

我将 CLion 与 CMake 一起使用,在重新加载 CMake 配置时出现以下错误

ld: library not found for -lgcc_s.10.4

我试过的是安装Xcode,安装没有错误。

我已尝试按照此处的建议创建符号链接 https://github.com/Paxa/fast_excel/issues/33

$ cd /usr/local/lib
$ sudo ln -s ../../lib/libSystem.B.dylib libgcc_s.10.4.dylib

似乎库 libSystem.B.dylib 不存在。一些网站提到以 Big Sur 开头的库驻留在一些“共享缓存”中,我不知道它是什么以及如何访问它,更不用说让 ld 自己访问它了。

非常欢迎任何关于如何解决这个问题的建议。谢谢!

一般来说,gcc 往往不适用于更新版本的 Mac OS。解决方案是使用内置 C/C++ 编译器。要自动使用这些而不是 GCC,请设置这些环境变量:

CC="clang"
CXX="clang++"

这将使用内置的 Mac 编译器。一旦这样做,我还没有 运行 遇到编译问题,这不是由于正在编译的实际代码。

你应该使用:g++-10 -o main main.cpp

  • macOS下brew安装g++的正确路径是:
$ which g++-10
> /usr/local/bin/g++-10
--
$ which g++ 
> /usr/bin/g++ //this is alias of clang (same for lyb)

如果您使用 CMakeLists.txt 文件,您将像这样配置它:

set(CMAKE_CXX_COMPILER "/usr/local/bin/g++-10" CACHE STRING "C compiler" FORCE)
set(CMAKE_C_COMPILER "/usr/local/bin/gcc-10" CACHE STRING "C++ compiler" FORCE)
set(CMAKE_CXX_STANDARD 17)

感谢您提供的所有答案都强调了可以解决问题的不同方面。最终的工作是 运行 brew reinstall gcc,并指向 CLion(或者像 Mike 提到的那样简单的 CMake)使用正确的编译器(我已经做过的事情,但如果有人的话,我想在这里提到它else发现这个问题也有同样的问题),我使用的路径是

/usr/local/Cellar/gcc/10.2.0/bin/gcc-10
/usr/local/Cellar/gcc/10.2.0/bin/g++-10

这些路径实际上只是链接自

的显式位置
/usr/local/bin/g++-10
/usr/local/bin/gcc-10

此外,正如 Matt Braunstein 所提到的,可以使用 Mac OS X 附带的 clang,这是我在弄清楚如何使用 gcc 解决问题时所做的。

我对这个问题的想法是,不知何故,用自制软件安装 gcc 并没有安装所需的一切,因为它似乎已经从以前的版本安装了,reinstall 命令似乎纠正了这个问题。

再次感谢您的回答,帮助我找到了这个解决方案,以及可能的解决方法。

我花了几个小时试图用 cmake 解决这个编译问题,CMakeLists.txt 中关于库链接的原始语句是!

link_directories(/usr/local/lib)
target_link_libraries(Program libsndfile.dylib)

生成后出现错误信息:

ld: library not found for -lsndfile

有效的解决方案是像这样添加整个路径:

target_link_libraries(Program /usr/local/lib/libsndfile.dylib)

在 Ubuntu 中不需要这个,但不知何故新的 MacOS 需要它。