首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的未定义符号错误

奇怪的未定义符号错误
EN

Stack Overflow用户
提问于 2013-06-23 17:12:14
回答 2查看 1.3K关注 0票数 0

我设置了以下h文件:

我不知道为什么我的c文件会出错。这里是我使用此函数的c文件中的唯一位置:

代码语言:javascript
复制
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文件中实现:

代码语言:javascript
复制
#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文件编译这些文件:

代码语言:javascript
复制
    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

知道吗?

EN

回答 2

Stack Overflow用户

发布于 2013-06-23 17:14:40

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

票数 0
EN

Stack Overflow用户

发布于 2013-06-23 17:17:00

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

我知道您在Inc1中使用它的位置,以及您声称它是由extern int set_sist(int)存在的,但是您在哪里定义它呢?如果不定义它,它会编译得很好,因为extern语句承诺函数存在于其他地方,但是当链接器真正需要定义时,它不会链接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17263217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档