标签:clang

以下是与标签 “clang” 相关联的文章

windows 下 clang 编译后无法查看 string 变量值问题

ubuntu 上用 lldb 可以正常调试,在 windows 上用 gdb 无法调试。开始以为是 mingw/clang/gdb 间的版本差异无法查看 std::string 变量值,尝试了各种版本组合,都不行。

stackoverflow 上找到了这个回答,原因是 clang 默认不生成 std::string 的调试信息,需要另外安装 libstdc++ 的编译符号表才能调试。

在 cmake 中加入这个编译选项,可以解决此问题

if((CMAKE_BUILD_TYPE STREQUAL Debug) OR (CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo))
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-limit-debug-info")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-limit-debug-info")
endif()

另外需要注意的是:

  • mingw 版本升级后,影响头文件和 lib 兼容,经常需要修改代码才能编译通过。
  • clang 版本升级仅影响二进制兼容,不影响代码兼容。
  • 目前比较稳定的组合是 clang400 + mingw540

windows 下安装 clang4.0

  • 下载 llvm4.0-win32 ,安装到 D:/llvm32
  • 下载 mingw-get , 安装到 D:/MinGW
  • D:/llvm32/bin D:/MinGW/bin 添加到 PATH 变量
  • 添加下列环境变量

    CC=clang
    CXX=clang++
    CFLAGS=-target i686-pc-windows-gnu
    CXXFLAGS=-target i686-pc-windows-gnu
    
  • clang3.7 版本之前,不需要设置 CFLAGS CXXFLAGS 编译目标,因为 windows 下仅支持 MinGW 编译工具;clang3.8 版本之后,需要设置编译目标,因为可以支持 MSVC 编译工具,默认编译目标是 i686-pc-windows-msvc
  • 如果需要 64 位编译环境,则 llvm 和 mingw 都要安装 64 位版本的。
  • 如果是 64 位系统,可以直接安装 llvm 64 位,兼容编译 32 位和 64 位程序