【问题标题】:Cant compile c++ on OS X Big Sur, "ld: library not found for -lgcc_s.10.4"无法在 OS X Big Sur 上编译 c++,“ld: library not found for -lgcc_s.10.4”
【发布时间】:2021-03-27 15:18:47
【问题描述】:

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

我在 CMake 中使用 CLion,在重新加载 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 自己访问它了。

非常欢迎任何有关如何解决此问题的建议。谢谢!

【问题讨论】:

    标签: c++ macos gcc macos-big-sur


    【解决方案1】:

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

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

    这将使用内置的 Mac 编译器。完成此操作后,我还没有遇到不是由于正在编译的实际代码而导致的编译问题。

    【讨论】:

      【解决方案2】:

      According to this answer 你应该使用: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)
      

      【讨论】:

        【解决方案3】:

        感谢您提供的所有答案,这些答案突出了可以解决问题的不同事物。最终的工作是运行brew reinstall gcc,并指向 CLion(或者像 Mike 提到的那样简单地 CMake)使用正确的编译器(我已经做过的事情,但是如果其他人发现这个问题并且有同样的问题),我使用的路径是

        /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 命令似乎纠正了这个问题。

        再次感谢您提供帮助我找到此解决方案的答案以及可能的解决方法。

        【讨论】:

          【解决方案4】:

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

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

          make 后出现错误信息:

          ld: 找不到 -lsndfile 的库

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

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

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

          【讨论】: