【问题标题】:Linking libc++ to CMake project on Linux在 Linux 上将 libc++ 链接到 CMake 项目
【发布时间】:2015-01-26 11:45:48
【问题描述】:

我想在 CMake 项目中在 Arch Linux 上使用 libc++ 和 clang。我安装了 libc++ 并将以下行添加到 CMakeLists.txt 中,如“在程序中使用 libc++”的 Linux 部分中的LLVM site 所述:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
set(CMAKE_EXE_LINKER_FLAGS "-lc++abi")

我在链接器的标志中只尝试了“++abi”,但没有帮助。我需要一些帮助来弄清楚我应该在 CMakeLists.txt 中写什么。

【问题讨论】:

  • 你得到什么错误信息?
  • @RichardHodges CMake 没有给出任何错误消息,但是当我尝试使用 std::string 例如时,clang 给了我以下消息:implicit instantiation of undefined template 'std::__l::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>'
  • 看起来你没有#include <string>
  • @RichardHodges 我做了,当我使用 libstdc++ 时一切正常
  • 尝试将 -lc++ 添加到链接器命令行。

标签: c++ linux cmake llvm clang++


【解决方案1】:

别忘了把编译器设置成clang++:

set(CMAKE_CXX_COMPILER "clang++")

另外,清除 cmake 生成的文件(删除文件夹 CMakeFilesCMakeCache.txt)。

根据您的系统,它也可能有助于设置

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -lc++abi")

【讨论】:

  • 嗯,我收到一个错误:CMAKE_CXX_COMPILER: clang++ is not a full path and is not found in the PATH.通过将环境变量“CXX”或 CMake 缓存条目 CMAKE_CXX_COMPILER 设置为编译器的完整路径或编译器名称(如果它在 PATH 中),告诉 CMake 在哪里可以找到编译器。没什么大不了的,我可以在配置中设置编译器。 (我不想设置整个路径。)
  • 我试过这个方法但仍然有链接错误,抱怨 std::cout 是未定义的引用。
【解决方案2】:

目前在 CMake 中执行此操作的“正确”方法,直到添加特定的基本功能以切换标准库,即使用工具链文件。

在该工具链文件中,您可以指定编译器等,类似于此处的其他答案。

但工具链的优点在于它们可以在命令行(使用 -DCMAKE_TOOLCHAIN_FILE=path/to/file)或在安装了 CMakeTools 扩展的 VSCode 中快速换出,也可能在其他编辑器中换出。

但必须手动编写自己的工具链文件是另一项晦涩难懂的苦差事!不好玩!

幸运的是,我偶然发现了这个 github,它维护了一组它们,因此您不必从头开始编写它们!应该不会出错。

https://github.com/ruslo/polly

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多