【问题标题】:Ignore undefined reference in c++忽略 C++ 中未定义的引用
【发布时间】:2014-01-21 13:56:45
【问题描述】:

是否有忽略未定义引用的编译器选项?我正在Linux下编译C++代码。

【问题讨论】:

标签: c++ linux gcc compiler-construction


【解决方案1】:

没有。这是不可能的。链接器在物理上无法生成带有未定义引用的输出可执行文件。这不是链接器做出的选择。

这有点像说,“排序这个列表,但我不会告诉你列表是什么”或“解决我的问题,但我只转储了代码”。

【讨论】:

  • 没有对您的回答进行反思,但这就是 SO 的疯狂之处。 100 分表示您今天做出的明显和一些答案需要时间和思想将得到 20 分。
  • 永远不要说永远。一些链接器允许您将 .o 文件组合成一个新的 .o 文件。当然,这个新的 .o 文件会有未定义的引用。
  • A .o 不是可执行文件。
  • 废话。取决于可执行格式,ELF 支持这一点就好了。 -1,对不起。
  • 我从未尝试过,但 lds --unresolved-symbols=ignore-all 究竟做了什么?我猜它会在运行时编译、链接和崩溃。
【解决方案2】:

你不是在编译,你是在链接。当您链接的程序调用未在您链接在一起的程序部分内定义的函数时,会发生未定义的引用错误。忽略该错误意味着程序调用了一个不存在的函数 - 那么应该发生什么?

所以简短的回答是:没有这样的选择,而且没有意义。

【讨论】:

    【解决方案3】:

    编译器已经忽略了未定义的引用,这完全是设计使然。

    【讨论】:

      【解决方案4】:

      对于以下内容,我假设您指的是链接器错误而不是编译器错误。 看看这个: Can GCC not complain about undefined references?

      这对我很有用,因为我正在编写在 c 文件中使用一堆东西的测试用例。对我来说,问题是在同一个 C 文件中定义了一些函数,其中包括对未定义函数的引用。也就是说,在我有限的测试范围内,它们对我来说是未定义的,但我没有调用这些函数。 因此我希望它编译和链接没有错误。 还有其他解决方案,例如:Is there a way to ignore an unused undefined references? 但我无法让它工作(可能是因为我有旧版本的 gcc)

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 2014-08-01
        • 1970-01-01
        • 2013-07-01
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多