【问题标题】:is there a way to list symbols that are defined in c/c++ by #define有没有办法列出 #define 在 c/c++ 中定义的符号
【发布时间】:2013-01-20 00:10:09
【问题描述】:

我正在使用 eclipse,并且在我的 c/c++ 代码中不断收到对 `__assert_func' 错误的未定义引用。

我想知道是否有办法判断正在定义什么(#define **)。我可以手动浏览我的文件,但我正在处理很多文件,这需要一段时间。是否有编译器选项或工具可以为我列出这些?

谢谢,

山姆

【问题讨论】:

    标签: c++ c eclipse compiler-errors debug-symbols


    【解决方案1】:

    这取决于编译器。如果您正在运行 GCC,则可以阅读此内容。

    GCC dump preprocessor defines

    【讨论】:

    • 我正在使用 Cross GCC/G++ 编译器,这会很有帮助,谢谢
    • 在这种情况下不要忘记将其标记为正确答案。
    【解决方案2】:

    未定义的引用与#defines 无关。这是一个链接器错误,您可能忘记链接到 .lib/.a 文件。

    【讨论】:

    • 嗯,它可以(最喜欢的是)#define assert(x) assert_func(x, __FILE__, __LINE__) 或类似的。
    • Csq - 谢谢我想我可能需要包含一个库有没有办法找到我需要的库?谷歌?我目前正在链接 -nostdlib
    • 我认为断言在标准库中,因此请尝试删除 -nostdlib 选项
    • 在没有 -nostdlib 的情况下返回许多未解决的包含错误。我必须使用 -nostdlib 来实现我正在做的事情。我包括了需要某些定义才能定义功能的 assert.h 文件...感谢您的时间/帮助
    • 这可能是不可能的。 assert 是标准库的一部分。不过,您可以编写自己的类似断言的函数。或者问一个关于 SO 的新问题。
    【解决方案3】:

    您通常可以从编译器生成预处理器输出 - 例如g++ -E myprog.cpp > myprog.i。我认为CL -E 在 Visual Studio 中做同样的事情,其他编译器往往有类似的选项。

    听起来您缺少的函数确实是 ASSERTassert 宏的一部分。

    【讨论】:

    • 我包含了 assert.h 但我认为我没有正确定义标题来定义函数
    • 问题很可能是你没有链接你应该链接的东西 - 但我不知道,因为你没有向我们展示任何代码......尝试分解小问题 - 它很可能会解决您的问题。我发现将#if 0 / #endif 放在函数内容(或函数外部)周围有助于减少“受到怀疑”的代码量。
    • 感谢您的提示,我将坚决尝试。我正在为 Atmel 提供的 ARM 处理器实现计时器类,我需要定义正确的东西或找出我应该链接的内容。我敢肯定这是一个简单的问题,我对这种事情很陌生。再次感谢您的帮助!
    猜你喜欢
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 2021-06-07
    • 2015-06-15
    • 2023-03-25
    相关资源
    最近更新 更多