【问题标题】:On mac, g++ (clang) fails to search /usr/local/include and /usr/local/lib by default在 mac 上,g++ (clang) 默认无法搜索 /usr/local/include 和 /usr/local/lib
【发布时间】:2014-07-17 07:47:59
【问题描述】:

我在 Mac 上使用 homebrew 安装 gmp

Kyumins-iMac:gcjlib math4tots$ g++ main.cpp -lgmp -lgmpxx
In file included from main.cpp:2:
./gcjlib.hpp:4:10: fatal error: 'gmpxx.h' file not found
#include <gmpxx.h>
         ^
1 error generated.

然后我明确告诉g++ 使用/usr/local/include

Kyumins-iMac:gcjlib math4tots$ g++ main.cpp -lgmp -lgmpxx -I/usr/local/include
ld: library not found for -lgmp
clang: error: linker command failed with exit code 1 (use -v to see invocation)

然后我明确告诉g++ 使用/usr/local/lib

Kyumins-iMac:gcjlib math4tots$ g++ main.cpp -lgmp -lgmpxx -I/usr/local/include -L/usr/local/lib
Kyumins-iMac:gcjlib math4tots$ ./a.out 
sum is -4444
absolute value is 4444

所以唯一的问题似乎是g++ 无法确认/usr/local

但是一直把这些都打出来很乏味,尤其是当我只是写小的单文件程序时。

有没有办法让g++ 默认承认/usr/local 中的内容? homebrew 用户是否有标准的方式来执行此操作?


我使用的是 OS X 10.9.3 和 Xcode 5.1.1,以防万一。

【问题讨论】:

  • 使用makefile怎么样?
  • 请不要再说g++,您正在调用的程序是clang++(通过苹果提供的令人困惑的别名),您的问题与gcc无关。如果您确实安装了真正的 gcc,它可能会按预期工作。
  • $ sudo rm -rf Applications/Xcode.app 在 10.12.6 为我工作。
  • 您可以使用g++ --version 查看您实际运行的内容。

标签: xcode macos gcc clang


【解决方案1】:

尝试运行xcode-select --install

至少在 Mavericks 上,我发现如果我安装 Xcode 应用程序而不安装命令行工具,那么这些工具是可用的,但正常的 unix-ey 构建不能正常工作。一种症状是/usr/local/include 不在包含搜索路径上。命令行工具似乎可以解决这个问题。

【讨论】:

    【解决方案2】:

    我也使用 Homebrew,在 Mac OSX Maverick 10.9.5 和 Xcode 6.0.1 上遇到了类似的问题,但通过运行解决了:

    xcode-select --install

    请注意,如果没有上一个答案给出的双连字符,它就不起作用。这将安装同样创建/usr/lib//usr/include/ 的命令行工具。我不知道为什么 Homebrew 在安装时不会自动检查这个,因为它确实会检查 Xcode...

    如果您想准确检查您的编译器正在查找哪些文件夹以查找您可以编写的头文件:

    cpp -v

    【讨论】:

    • 我的英雄!在过去的 16 个小时里,我一直在头疼,只用一行就解决了。
    • 努力理解为什么 Apple 会默认停止搜索 /usr 和 /usr/local,但无论如何,这也解决了我的一些构建问题。
    • 真正的英雄在那里!
    • 我猜你的意思是:这会安装命令行工具,也可以搜索/usr/lib//usr/include/
    【解决方案3】:

    解决方法是:

    export C_INCLUDE_PATH=/usr/local/include
    export CPLUS_INCLUDE_PATH=/usr/local/include
    

    至少这欺骗了预处理器在这里表现:)

    【讨论】:

    • 这对我构建 nginx 很有用,虽然 openssl/ssl.h/opt/local/include 中,所以我使用了那个路径。
    • 导出LIBRARY_PATH也可能有用。
    • 使用 cmake,include_directories(/usr/local/include) 也可以使用
    【解决方案4】:

    我有 Yosemite 10.10.5 并运行 xcode-select --install 并没有为我解决问题。命令返回xcode-select: error: command line tools are already installed, use "Software Update" to install updates

    当我运行xcode-select -p 时,它显示/Applications/Xcode.app/Contents/Developer。我最终从 Applications 目录中删除了 Xcode,这导致 xcode-select -p 返回 /Library/Developer/CommandLineTools。这为我修复了编译器错误。

    【讨论】:

    • 当我尝试这个时,clang 再也找不到一些重要的标准库文件了。
    • 不清楚这个答案是如何解决问题的,如果你删除Xcode,所有的编译器都会消失。看到这个的人,不要尝试。
    【解决方案5】:

    这对我很有帮助:

    使用最新版本。 1.0.2o_1 只是当前版本。

    brew install openssl
    ln -s /usr/local/Cellar/openssl/1.0.2o_1/include/openssl /usr/local/include/openssl
    ln -s /usr/local/Cellar/openssl/1.0.2o_1/lib /usr/local/lib/openssl
    

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2015-02-03
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2013-04-25
      • 2011-06-12
      相关资源
      最近更新 更多