【问题标题】:How to compile a debug static library using LLVM clang如何使用 LLVM clang 编译调试静态库
【发布时间】:2021-07-30 09:28:25
【问题描述】:

我正在编译一个迭代器调试级别为 2 的静态库(在本例中为 Rive),以便与该项目中的所有其他静态库兼容。该工具集是 Windows 上的 LLVM clang,针对 x64。

旁注:Rive 项目使用的构建系统 (premake5) 与我编译的其他使用 cmake 的项目不同。

我在编译 #error _ITERATOR_DEBUG_LEVEL > 1 is not supported in release mode. 时遇到错误。但是,据我所知,我不是在发布模式下编译。为什么我会收到有关“发布模式”的错误消息?

这是一个示例编译器命令:

clang++   -MMD -MP -D_USE_MATH_DEFINES -DDEBUG -D_ITERATOR_DEBUG_LEVEL=2 -I../include -m64 -g -std=c++17 -Wall -fno-exceptions -fno-rtti -MTd  -o \"obj/debug/cubic_asymmetric_vertex_base.o\" -MF \"obj/debug/cubic_asymmetric_vertex_base.d\" -c \"../src/generated/shapes/cubic_asymmetric_vertex_base.cpp\"",...)

据我所知,-g 正在生成调试符号,-MTd 指定调试静态库。为什么错误提示我处于发布模式?

【问题讨论】:

  • 如果您不是在发布模式下编译,那么您定义 DEBUG 标志会令人惊讶!尝试从命令行中删除 -DDEBUG。
  • 谢谢伊瑟姆。我实际上开始时没有 DEBUG 标志,并且我逐渐添加了越来越多的标志来尝试使其工作。所有结果都是一样的——迭代器调试级别为 0 的库,而我需要它为 2。

标签: c++ compiler-errors clang++ premake rive


【解决方案1】:

以下两件事结合起来为我解决了这个问题:

  1. 传入标志 _DEBUG 以及 DEBUG
  2. 使用 PowerShell 而不是 bash 运行 make

这让我可以在调试模式下编译一个静态库,其中 _ITERATOR_DEBUG_LEVEL 为 2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 2012-02-27
    • 1970-01-01
    • 2020-01-19
    • 2013-04-29
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    相关资源
    最近更新 更多