问题
如何使我的自定义安装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/lib 64目录被添加到LD_LIBRARY_PATH中,CC/CXX被分别设置为my gcc/g++。
然后用cmake ../llvm -DCMAKE_INSTALL_PREFIX=... -DCMAKE_BUILD_TYPE=Release -DLLDB_DISABLE_LIBEDIT=True -DCMAKE_C_COMPILER=${CC} -DCMAKE_CXX_COMPILER=${CXX}配置clang。请注意,我设置了CMAKE_C_COMPILER/CMAKE_CXX_COMPILER,尽管我不应该这样做,因为其他一些人因此说他们通过这样做来修复它,我想可能发生了一些奇怪的事情,但这并没有修复它。
问题
如果我编译这个测试文件:
#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年起),但是在当前的版本中它似乎没有出现。我相信我在运行时看到了同样的选择,但是要求用户这样做(当他们已经为替换他们的整个编译器系统提供了某种东西时)是不可接受的解决方案。
发布于 2018-05-24 21:49:31
结果是需要更新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 ...
然后设置clang,以便在建成后查找正确的位置。
https://stackoverflow.com/questions/50510626
复制相似问题