【问题标题】:Why is this C function getting linked when it only has a prototype and no code?为什么这个 C 函数只有一个原型而没有代码时会被链接?
【发布时间】:2018-10-18 03:49:20
【问题描述】:

我有一个带有函数原型的头文件...

void setupEntry();

该函数是从链接到的库中的 main() 调用的,但在项目中没有任何地方实际定义该函数。

当我链接项目时,它不会生成“未定义函数”错误。

当我查看 .lss 输出时,该函数在那里并且是空的,最后只有一个 return...

void setupEntry() {
     a6e:   08 95           ret

编译器或链接器为什么/如何无中生有地创建这个空函数而不是报告错误?

【问题讨论】:

    标签: atmelstudio


    【解决方案1】:

    回答:退出并重新启动 Atmel Studio。

    所以在花了一个小时试图解决这个问题后,我碰巧退出了 Atmel Studio,然后重新加载它......问题就消失了。完全相同的代码和项目文件,但在重新加载后首次构建并出现预期的错误......

        libblinkos.a(blinkos.o): In function `run()':
        blinkos.cpp(243,1): error: undefined reference to `setupEntry()'
    

    Atmel Studio 中一定存在一些错误或缓存问题。我想教训是更频繁地退出和重新加载。 :/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多