我已设置以下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
任何想法?
答案 0 :(得分:0)
链接器在您的代码和所有库中搜索引用。也许您没有包含所需的库或其他对象模块?
答案 1 :(得分:0)
下划线似乎有所不同。这是您的编译器在其处理中附加到所有符号前面的内容,还是您同时使用set_sist
和_set_sist
作为函数?
我在Inc1
中看到您在哪里使用它,并且您声称它存在于extern int set_sist(int)
,但您在哪里定义它?如果你没有定义它,它将编译正常,因为你的extern语句承诺该函数存在于其他地方,但是当链接器确实需要定义时它不会链接。