【问题标题】:How to solve "Undefined reference to function" in Eclipse CDT?如何解决 Eclipse CDT 中的“未定义的函数引用”?
【发布时间】:2019-04-13 13:02:57
【问题描述】:

我确实使用 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);的函数。

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

对 function1() 的未定义引用

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

如何解决这个问题?

【问题讨论】:

    标签: c eclipse embedded eclipse-cdt


    【解决方案1】:

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

    注意,使用#includeing 头文件,您只能使编译器知道外部函数。您还需要在链接阶段链接到外部函数。确保将包含 function1 的编译目标文件包含在链接中。

    【讨论】:

    • 我对 Eclipse CDT 4.14 有同样的问题。如何指示 eclipse 链接文件?
    【解决方案2】:

    看来您需要进行正确的链接

    1. 如果您要与库链接,则需要指定:
    • 库名:Project\Settings\C C++ General\Paths and Symbols\Libraries
    • 链接器应搜索此库的位置: Project\Settings\C C++ General\Paths and Symbols\Library Paths
      重要提示:见注释。
    1. 如果您要链接目标文件,请将其添加到:
    • Project\Settings\C C++ Build\Settings\Linker\Miscellaneous\Other objects

    注意

    • 例如,如果您的库名称是libsomething.a,那么您只需指定something 作为名称;所以省略lib前缀和.a后缀
    • 如果您的库没有以lib 为前缀,那么您需要添加其名称以: 为前缀。例如,something.a 应添加为 :something.a

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-25
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2011-08-19
      • 1970-01-01
      相关资源
      最近更新 更多