奇怪的未定义符号错误

时间:2013-06-23 17:12:14

标签: c compilation

我已设置以下h文件: h file code with error

我不知道为什么我收到有关我的c文件的错误。 这是我在c文件中唯一使用此功能的地方:

Inc1(int ptr)
{
  set_sist(print_var1);
  while (1)
  {
     count1++;
     if ((count1 % 20000) == 0)
       var1++;
  } // while

}  /* Inc */

不用说我的文件头部有一个#include "my1.h"。 错误是:模块hw4.c中未定义的符号_set_sist

该函数正在另一个c文件中实现:

#include <conf.h>
#include <kernel.h>
#include <io.h>
#include <proc.h>   // for currpid
#include "my1.h"    // uses 'FPTR' type


SYSCALL set_sist(FPTR int1)
{   
bla bla bla bla
}

我使用bat文件编译文件,代码如下:

    e:
cd xinu4win\newsrc\hw4
path e:\tc\tc\bin;%path%
tcc -I.. -c -DTURBOC initiali.c 

tcc -I.. -c initiali.c > errs
tcc -I.. -c kill.c > errs
tcc -I.. -c resched.c > errs 
tcc -I.. -c setsist.c > errs

type errs


tlib xinu.lib -+ initiali.obj -+ kill.obj -+ resched.obj -+setsist.obj
tlib xinu.lib -+ setsist.obj
tcc -I.. hw4.c my1.h ..\xinu.lib 
hw4
pause

任何想法?

2 个答案:

答案 0 :(得分:0)

链接器在您的代码和所有库中搜索引用。也许您没有包含所需的库或其他对象模块?

答案 1 :(得分:0)

下划线似乎有所不同。这是您的编译器在其处理中附加到所有符号前面的内容,还是您同时使用set_sist_set_sist作为函数?

我在Inc1中看到您在哪里使用它,并且您声称它存在于extern int set_sist(int),但您在哪里定义它?如果你没有定义它,它将编译正常,因为你的extern语句承诺该函数存在于其他地方,但是当链接器确实需要定义时它不会链接。