Eclipse Kepler中未定义的引用

时间:2014-07-21 08:40:58

标签: c eclipse

Hello Stack overflow社区,

我正在开发一个来自Variscite的Imx6开发套件的C应用程序,带有yocto项目和Eclipse Kepler。我根据指南构建了一个helloworld应用程序,并编写了一些额外的代码,我现在希望将它们放在不同的源代码中并包含文件以保持整洁。我制作了以下文件:uart.c,uart.h,gmttime.c和gmttime.h,并将它们包含在src文件夹中。现在我的问题是,当我从我创建的任何源文件调用任何函数时,我得到以下编译错误:

Description:                          Resource      
make:    *** [all] Error 2            Helloworld       C/C++ Problem   
make[1]: *** [all-recursive] Error 1  Helloworld       C/C++ Problem
make[2]: *** [Helloworld] Error 1     Helloworld       C/C++ Problem   
undefined reference to `uartInit'     Helloworld.c     /Helloworld/src 

我的项目文件如下所示:

Helloworld
  /includes
     /usr/include
     /usr/include/x86_64-linux-gnu
     /usr/lib/gcc/x86_64-linux-gnu/4.6/include
     /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
     /usr/local/include
     /Helloworld/src
  /src
    gmttime.c
    gmttime.h
    helloworld.c
    uart.c
    uart.h
    makefile
    makefile.am
    makefile.in
  #more files are in this project, which I think are not so interresting or cause or solution to this problem. 

在不同的网站上提到我应该将目录添加到以下项目选项:Project-> Properties-> C / C ++ General / Paths和Symbols到Includes和Source Location选项卡。我已将/ Helloworld / src和/ helloworld添加到两个选项卡中,但无论我尝试什么,我仍然会收到错误。我找不到任何其他解决方案,所以我希望有人遇到同样的问题,并告诉我如何解决它。

如果有人能帮助我,我会非常感激,如果我的问题有任何问题或需要更多信息,请询问。

此致

修改 uart_init的函数原型在uart.h中声明,函数在uart.c中存在,两个文件都是用户编写的,因此不需要库包含。

我的helloworld.c文件中包含uart.h,就像我将它包含在任何普通的c应用程序中一样。代码突出显示在#include“uart.h”中没有显示任何错误,虽然它在uart.h的每个函数中显示一个红色下划线,抱怨;将鼠标悬停在函数上时未定义的引用。

我可以打开一个函数声明,然后eclipse将我带到uart.c并显示函数的源代码。似乎编译器不包含额外的.c和.h文件,除了那些最初由Hello World ANSI C项目在其构建中生成的文件,尽管它在函数上使用F3“Open decleration”时它正确引用。我不知道make文件是否自动包含构建中的新文件或项目源项目源位置设置项目 - >属性 - > C / C ++一般/路径和符号不正确。

1 个答案:

答案 0 :(得分:0)

解决方案非常简单,我必须将uart.c包含在makefile.am中的project_SOURCES中。我一直在寻找错误的方向,因为我认为问题是由错误或未设置的项目配置引起的。我在网上找到的解决方案都通过在C / C ++常规设置下设置包含和源位置文件夹来解决,因此我认为解决方案是在项目配置中。经过一些试验和错误,我终于找到了解决方案。