gcc - 手动构建的 GCC 和 Clang;Clang 查看系统 C++ 路径,而不是我的 GCC 的
问题描述
问题
我如何让 [我的自定义安装] clang 查看 C++ 头文件的正确位置(即我的 gcc 自定义安装)?
系统
我目前正在使用所有默认库的 RHEL 6 计算机。
在非系统目录中,我[成功] 编译了 mpc、mpfr、gmp、cmake、python、gcc(4.9.3 和 8.1.0)和 clang(5.0.0 使用 gcc 4.9.3 和 6.0.0使用 gcc 8.1.0)。
gcc 配置为--prefix=... --with-gmp=... --with-mpfr=... --with-mpc=... --disable-multilib
gcc(及其所有依赖项)的 bin 目录已添加到PATH
,其 lib/lib64 目录已添加到LD_LIBRARY_PATH
,并且 CC/CXX 分别设置为 [my] gcc/g++。
然后 clang 被配置为cmake ../llvm -DCMAKE_INSTALL_PREFIX=... -DCMAKE_BUILD_TYPE=Release -DLLDB_DISABLE_LIBEDIT=True -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX}
. 请注意,我设置了 CMAKE_C_COMPILER/CMAKE_CXX_COMPILER ,即使我不应该这样做,因为其他一些 SO 答案说他们通过这样做修复了它,我认为可能发生了一些奇怪的事情,但这并没有解决它。
问题
如果我编译这个测试文件:
#include <atomic>
int main ( int , char const** )
{
std::atomic<int> i (0) ;
i.fetch_add ( 2 ) ;
return 0 ;
}
我得到这个结果:
[redacted]~/Temporary% g++ -std=c++11 main.cpp
[redacted]~/Temporary% clang++ -std=c++11 main.cpp
main.cpp:2:10: fatal error: 'atomic' file not found
#include <atomic>
^~~~~~~~
1 error generated.
在其他一些代码中,我有更长的包含路径,这些路径会产生有关问题的更多信息。其中一个#include <mutex>
会产生此错误:
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/mutex:45:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/system_error:163:28: error: incompatible operand types ('void (*)()' and 'bool')
{ return _M_value != 0 ? &__not_bool_type : false; }
这清楚地表明它将转到内置标题,而不是 [我已验证] 是 gcc 8.1.0 安装的一部分。
其他注意事项
我已经看到(截至 2012 年)有一个--gnu-toolchain
选项,configure
但它似乎不存在于当前版本中。我相信我在运行时看到了相同的选项,但要求用户这样做(当他们已经采购了一些东西来替换他们的整个编译器系统时)不是一个可接受的解决方案。
解决方案
原来clang/Config/config.h
文件需要更新,这是由 cmake 进程自动生成的。
具体来说,GCC_INSTALL_PREFIX
需要设置。
如果您配置了gcc
安装,../gcc/configure --prefix=/path/to/my/gcc ...
那么您应该这样做cmake ../llvm -DGCC_INSTALL_PREFIX=/path/to/my/gcc ...
然后,这会在它建成后发出叮当声以寻找正确的位置。
推荐阅读
- javascript - 当父级传递新数据或更新数据时重新渲染表格组件
- asp.net-core-3.1 - 使用来自 appsetting 的命名连接时,ASP.NET Core 3.1 Scaffold-DbContext 中的实体框架核心
- azure-devops - 如何在 Azure Devops 中运行 NUnit 测试,而不在每个项目中都有测试适配器?
- node.js - `No "exports" main resolve` 尝试运行 Storybook 时出现错误
- c - 为 UDP 嗅探创建 TUN/TAP 接口
- spring-data-jpa - Spring Data JPA + JpaSpecificationExecutor + NamedEntityGraph
- javascript - 在使用异步等待的参数列表之后缺少 )
- java - 当我单击列表视图而不选择项目(JavaFX)时,我不断收到空指针异常?
- php - 如何从对象数组中列出 html 元素(PHP)
- java - 如何修复这个对 hashmap.get 的可疑调用