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 に答える