0

我设置了以下 h 文件: h 文件代码有错误

我不知道为什么我会收到有关我的 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

任何想法?

4

2 回答 2

0

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

于 2013-06-23T17:14:40.060 回答
0

似乎有一个下划线的区别。这是您的编译器在其处理过程中附加到所有符号前面的东西,还是您同时使用set_sist_set_sist作为函数?

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

于 2013-06-23T17:17:00.497 回答