手工制作GCC和Clang; Clang着眼于System C ++ Paths,而不是My GCC

时间:2018-05-24 13:27:21

标签: gcc clang gnu-toolchain

问题

如何让[我的自定义安装] 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安装的一部分。

其他笔记

我已经看到--gnu-toolchain上有一个configure选项(截至2012年),但它似乎并不存在于当前版本中。我相信我在运行时看到了相同的选项,但要求用户这样做(当他们已经找到了替换整个编译器系统的东西时)是不可接受的解决方案。

1 个答案:

答案 0 :(得分:1)

原来需要更新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 ...

然后设置铿锵声,在它构建完成后查看正确的位置。