When compile llvm 3.1, why get error: expected primary-expression before ‘>’ token

When compile llvm 3.1, why get error: expected primary-expression before ‘>’ token

出于某种原因,我需要安装 llvm 3.1 或 llvm 3.0,但在 make 期间出现此错误。

[  5%] Building CXX object utils/TableGen/CMakeFiles/llvm-tblgen.dir/AsmMatcherEmitter.cpp.o
In file included from /home/ubuntu/llvm/utils/TableGen/AsmMatcherEmitter.cpp:103:0:
/home/ubuntu/llvm/include/llvm/ADT/PointerUnion.h: In member function ‘int llvm::PointerUnion3<PT1, PT2, PT3>::is() const’:
/home/ubuntu/llvm/include/llvm/ADT/PointerUnion.h:266:26: error: expected primary-expression before ‘>’ token
       return Ty(Val).is<T>();
                          ^
/home/ubuntu/llvm/include/llvm/ADT/PointerUnion.h:266:28: error: expected primary-expression before ‘)’ token
       return Ty(Val).is<T>();
                            ^
/home/ubuntu/llvm/include/llvm/ADT/PointerUnion.h: In member function ‘T llvm::PointerUnion3<PT1, PT2, PT3>::get() const’:
/home/ubuntu/llvm/include/llvm/ADT/PointerUnion.h:279:27: error: expected primary-expression before ‘>’ token
       return Ty(Val).get<T>();
                           ^'
/home/ubuntu/llvm/include/llvm/ADT/PointerUnion.h:279:29: error: expected primary-expression before ‘)’ token
       return Ty(Val).get<T>();
                             ^

我猜测可能是llvm 3.0和gcc 7.0.0之间存在兼容性问题,所以我安装了gcc-4.6.3,并使用这个cmake -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/home/ubuntu/install -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,$HOME/gcc463/install -L$HOME/gcc463/install" -G "Unix Makefiles" ../llvm进行配置。但是仍然出现同样的错误。任何人都知道为什么以及如何解决它?谢谢!!

尝试传递 -std=c++98,如果不行则传递 -std=c++11。恐怕这可能是因为不同的 C++ 版本不兼容。

此外,您可能必须从 CXXFLAGS 中删除 -std=c++14(如果存在)。这是 g++7 的默认设置。

So I installed gcc-4.6.3, and use this

您是否更改了 CMAKE_C_COMPILERCMAKE_CXX_COMPILER 标志以便 cmake 可以使用 gcc-4.6相反?

hth,