如何解决Eclipse CDT中的“对函数的未定义引用”?

时间:2018-11-09 23:27:32

标签: c eclipse embedded eclipse-cdt

我确实使用Eclipse Photon(4.8.0)设置了一个C项目来为ESP-32开发程序。我确实根据this official setup instructions配置了IDE。

刷新ESP-32可以正常工作。但是,一旦我尝试从子文件夹中包含头文件,就会遇到麻烦。我已经建立了一个非常简单的项目来说明这个问题。该项目由main.cbase/test.hbase/test.c组成,而test.htest.c文件仅包含一个签名为void function1(void);的函数。 / p>

当我尝试在function1()中呼叫main.c时,我在main.c中收到此错误:

  

对function1()的未定义引用

请与随附的屏幕截图进行比较,其中描述了所有内容。

如何解决此问题?

enter image description here

2 个答案:

答案 0 :(得分:2)

这不是编译器,而是链接器错误。

请注意,使用#include处理头文件时,仅会使编译器知道外部函数。在链接阶段,还需要 link 到外部函数。确保在链接中包含包含function1的编译目标文件。

答案 1 :(得分:1)

似乎您需要进行正确的链接

  1. 如果要链接到库,则需要指定:

    • 库名称:Project\Settings\C C++ General\Paths and Symbols\Libraries
    • 链接器应在其中搜索此库的位置:Project\Settings\C C++ General\Paths and Symbols\Library Paths
      请参阅注释1。
  2. 如果要链接目标文件,请将其添加到:

    • Project\Settings\C C++ Build\Settings\Linker\Miscellaneous\Other objects

注释1
例如,如果您的库名称为libsomething.a,则只需指定something作为名称;因此省略lib前缀和.a后缀。如果您的库没有以lib为前缀,那么您需要添加以:为前缀的名称,例如:something.a应该添加为:something.a