如何正确配置 Clang?

How to properly configure Clang?

我刚刚编译了 LLVM、Clang 和 libc++ 的最新版本。但是现在我不知道如何配置环境来使用它们。我在 $PATH 中添加了一个编译二进制文件并设置了

$D_LIBRARY_PATH=$(llvm-config --libdir)

但是无论如何,当我用示例文件测试 运行 'clang' 时,它使用了一些“/usr/bin/ld”链接器,我不知道它是什么(因为我已经卸载了 'g++' 因为认为这是问题所在(在 'clang' 使用它的一些链接器之前)并且我没有任何其他 C++ 编译器)。

那么现在如何指出正确的 'llvm-ld'、libc++ 包含和库路径?我不想每次都传递一些复杂的参数。也许我应该设置一些环境变量。

我也在用KDevelop,效果一样。

如果这听起来很愚蠢,请不要批评我,但这是我第一次使用 Linux(之前一直使用 Windows)。我正在使用最新的 'OpenSUSE' dist.

更新 - 这是使用 clang 编译器的 CodeLite 的输出 window:

/bin/sh -c 'make -j 2 -e -f Makefile' ----------Building project:[ ClangTest - Debug ]---------- make[1]: Entering directory '/run/media/bs_ld/8688602a-296d-40e1-bd37-c90e69f45769/Workspace/CL_C++_WP/ClangTest' clang++ -c "/run/media/bs_ld/8688602a-296d-40e1-bd37-c90e69f45769/Workspace/CL_C++_WP/ClangTest/main.cpp" -stdlib=libc++ -o ./Debug/main.cpp.o -I. -I/run/media/bs_ld/8688602a-296d-40e1-bd37-c90e69f45769/Build/include/c++/v1/ clang++ -o ./Debug/ClangTest @"ClangTest.txt" -L. -L/run/media/bs_ld/8688602a-296d-40e1-bd37-c90e69f45769/Build/lib/ /usr/bin/ld: cannot find crtbegin.o: No such file or directory /usr/bin/ld: cannot find -lstdc++ /usr/bin/ld: cannot find -lgcc_s /usr/bin/ld: cannot find -lgcc clang-3.7: error: linker command failed with exit code 1 (use -v to see invocation) ClangTest.mk:76: recipe for target 'Debug/ClangTest' failed make[1]: * [Debug/ClangTest] Error 1 make[1]: Leaving directory '/run/media/bs_ld/8688602a-296d-40e1-bd37-c90e69f45769/Workspace/CL_C++_WP/ClangTest' Makefile:4: recipe for target 'All' failed make: * [All] Error 2 0 errors, 0 warnings

您应该能够 运行 make install,也许还有一个可选的 DESTDIR=/......,这样它就不会破坏您的系统文件。

既然你在 OpenSUSE 上,你不妨使用你的发行版的构建服务,并从 here 安装 LLVM-Clang 的 SVN 版本。您应该也能找到 libc++ 和 LLVM 本身。

否则,make install DESTDIR=/opt/llvm 应该可以工作,然后您可以将 /opt/llvm/bin/ 添加到 PATH 并通过添加此编译和 link 选项来使用 libc++:-stdlib=libc++.您还需要 LD_LIBRARY_PATH 中的 /opt/llvm/lib 之类的东西才能找到 libc++

这应该开箱即用,但我只使用过我的发行版的包,而不是一个自建的 Clang 来做到这一点。

请注意,Clang 仍在使用您的系统 linker,ld,这很好。目前,LLVM 尚未提供该程序的完整功能替代方案,但 they are working on it.

编辑:看来你卸载太多了:Clang 还使用 GCC crtbegin 和 crtend 目标文件。所以只需再次安装 GCC 以及 glibc 及其开发包。