【发布时间】:2022-08-14 12:23:17
【问题描述】:
我尝试构建 llvm 并收到与 stdlib 相关的错误消息。
我用错误消息搜索了原因,但是
我不太了解 c/c++,所以我无法理解发生了什么或如何解决这个问题。
请告诉我这意味着什么以及在我的环境中发生了什么。
1:我做了什么
我试图用下面的方法构建llvm。
git clone https://github.com/llvm/llvm-project -b release/12.x
cd llvm-project
mkdir build
cd build
cmake -G Ninja \\
-DDEFAULT_SYSROOT=${HOME}/riscv_github/riscv64-unknown-elf \\
-DCMAKE_BUILD_TYPE=\"Debug\" \\
-DLLVM_TARGETS_TO_BUILD=\"X86;AArch64;RISCV\" \\
-DLLVM_ENABLE_PROJECTS=\"clang;libcxx;libcxxabi\" \\
../llvm
ninja
并在下面收到一条错误消息。
[8/4685] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o
FAILED: lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o
/usr/bin/c++ -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/xxx/github.com/llvm-myriscvx120/build/lib/Support -I/home/xxx/github.com/llvm-myriscvx120/llvm/lib/Support -I/home/xxx/github.com/llvm-myriscvx120/build/include -I/home/xxx/github.com/llvm-myriscvx120/llvm/include -isystem /usr/bin/include -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-class-memaccess -Wno-redundant-move -Wno-pessimizing-move -Wno-noexcept-type -Wdelete-non-virtual-dtor -Wsuggest-override -Wno-comment -Wmisleading-indentation -fdiagnostics-color -g -std=c++14 -fno-exceptions -fno-rtti -MD -MT lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o -MF lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o.d -o lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttrs.cpp.o -c /home/xxx/github.com/llvm-myriscvx120/llvm/lib/Support/ARMBuildAttrs.cpp
In file included from /usr/include/c++/12.1.1/cstdlib:75,
from /usr/include/c++/12.1.1/bits/stl_algo.h:69,
from /usr/include/c++/12.1.1/algorithm:61,
from /home/xxx/github.com/llvm-myriscvx120/llvm/include/llvm/ADT/Hashing.h:51,
from /home/xxx/github.com/llvm-myriscvx120/llvm/include/llvm/ADT/ArrayRef.h:12,
from /home/xxx/github.com/llvm-myriscvx120/llvm/include/llvm/Support/ELFAttributes.h:12,
from /home/xxx/github.com/llvm-myriscvx120/llvm/include/llvm/Support/ARMBuildAttributes.h:21,
from /home/xxx/github.com/llvm-myriscvx120/llvm/lib/Support/ARMBuildAttrs.cpp:9:
/usr/include/stdlib.h:579:5: error: expected initializer before ‘__attr_dealloc_free’
579 | __attr_dealloc_free;
| ^~~~~~~~~~~~~~~~~~~
/usr/include/stdlib.h:583:14: error: expected initializer before ‘__attr_dealloc’
583 | __THROW __attr_dealloc (reallocarray, 1);
| ^~~~~~~~~~~~~~
/usr/include/stdlib.h:606:35: error: expected initializer before ‘__attribute_alloc_align__’
606 | __THROW __attribute_malloc__ __attribute_alloc_align__ ((1))
| ^~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/stdlib.h:812:6: error: expected initializer before ‘__attr_dealloc_free’
812 | __attr_dealloc_free __wur;
| ^~~~~~~~~~~~~~~~~~~
/usr/include/stdlib.h:961:3: error: expected initializer before ‘__fortified_attr_access’
961 | __fortified_attr_access (__write_only__, 1, 3)
| ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/stdlib.h:1016:30: error: expected initializer before ‘__fortified_attr_access’
1016 | __THROW __nonnull ((2)) __fortified_attr_access (__write_only__, 2, 3);
| ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/12.1.1/cstdlib:171:11: error: ‘wcstombs’ has not been declared in ‘::’
171 | using ::wcstombs;
| ^~~~~~~~
ninja: build stopped: subcommand failed.
在我看来gcc 坏了,所以我尝试用gcc-11(g++-11) 和gcc-10(g++-10) 构建llvm,并得到了同样的错误。
之后,我检查到release/11.x 分支并尝试使用相同的cmake 选项进行构建。
然后构建步骤开始了,看起来不错。
所以我尝试了另一个分支,release/13.x、release/14.x、release/15.x,但它们不起作用。
2:我的环境
$ uname -a
Linux arch-x13 5.18.16-arch1-1 #1 SMP PREEMPT_DYNAMIC Wed, 03 Aug 2022 11:25:04 +000 x86_64 GNU/Linux
$ gcc --version
gcc (GCC) 12.1.1 20220730
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ cmake --version
cmake version 3.23.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).**strong text**
$ ninja --version
1.11.0
编辑:
我可以使用gcc-9 和gcc-10 在Ubuntu20.04 机器上构建llvm 的release/12.x 分支,所以我在这个问题上标记了archlinux。
我还使用选项DCMAKE_CXX_STANDARD= 尝试了某些版本的c++ 标准,20、17 和14,但它没有帮助。
-
当您使用
release/11.x分支成功构建时,您使用的是哪个版本的 gcc? -
@charlesdk 我用过
gcc-12.1.1
标签: c++ linux gcc llvm archlinux