测试环境使用的系统是 Fedora 41: https://fedoraproject.org/workstation/download
Clang 是编译器前端,后端还是默认依赖 GCC 的运行库实现,如果想要使用全套 Clang 工具链,需要额外安装 libcxx
, llvm-libunwind-static
,llvm-libunwind-devel
运行库和 lld
链接器:
$ sudo dnf install clang lld libcxx libcxx-devel llvm-libunwind-static llvm-libunwind-devel
其中 llvm-libunwind*
是可选的,即使不链接到 llvm-libunwind
也会使用系统的 libgcc_s.so
进行栈回溯。
使用编译 C++ 源文件:
$ clang++ -std=gnu++23 -stdlib=libc++ -fuse-ld=lld -rtlib=compiler-rt -unwindlib=libunwind -l:libunwind.a main.cc
参数 -l:libunwind.a
表示链接的是静态库 libunwind.a
,由 llvm-libunwind-static
提供。
查看依赖关系:
$ ldd a.out
linux-vdso.so.1 (0x0000ffff96a65000)
libc++.so.1 => /lib64/libc++.so.1 (0x0000ffff96900000)
libc++abi.so.1 => /lib64/libc++abi.so.1 (0x0000ffff968b0000)
libm.so.6 => /lib64/libm.so.6 (0x0000ffff96800000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000ffff967c0000)
libc.so.6 => /lib64/libc.so.6 (0x0000ffff965f0000)
/lib/ld-linux-aarch64.so.1 (0x0000ffff96a20000)
如果是编译 C 源文件,需要把 clang++
, gnu++23
和 libc++
换成 clang
, gnu23
和 libc
:
clang -std=gnu23 -stdlib=libc -fuse-ld=lld -rtlib=compiler-rt main.c