我设置了以下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知道吗?
发布于 2013-06-23 17:14:40
链接器在您的代码和所有库中搜索引用。也许您没有包括所需的库或其他对象模块?
发布于 2013-06-23 17:17:00
似乎有一个不同的下划线。您的编译器是在其处理过程中将其附加到所有符号的前面,还是同时使用set_sist和_set_sist作为函数?
我知道您在Inc1中使用它的位置,以及您声称它是由extern int set_sist(int)存在的,但是您在哪里定义它呢?如果不定义它,它会编译得很好,因为extern语句承诺函数存在于其他地方,但是当链接器真正需要定义时,它不会链接。
https://stackoverflow.com/questions/17263217
复制相似问题