2016-10-31 2 views
0

.cファイルをコンパイルしようとしていますが、必要なインクルードファイルを置いても "未定義参照"エラーが発生します。ちなみに、私のコードのヘッダにあるように、#include drive.hとは何の問題もありませんが、gccのように#includeハードウェアはこの行を無視しています。ここxxxインクルードへの未定義の参照は機能しません。

は私のコードで、あなたに感謝:)

を、私はこのようにコンパイルしてるの方法によって:ヘッダファイルを含むGCC drive.c

#include <stdlib.h> 
#include <stdio.h> 
#include <assert.h> 
#include "include/hardware.h" 
#include "drive.h" 

static void empty_it(){ 
    return ; 
} 

int main(int argc , char** argv){ 

unsigned int numCyl ; 
unsigned int numSec ; 

unsigned char* buffer ; 

unsigned int i ; 

/* init hardware */ 
/* on initialise toujours le materiel de la meme facon*/ 
if(init_hardware("hardware.ini") == 0){ 
    fprintf(stderr, "hardware initialisation error ! \n"); 
    exit(EXIT_FAILURE) ; 
} 

/* Interrupt handlers */ 
for(i=0 ;i<16;i++){ 
    IRQVECTOR[i] = empty_it ; 
} 

/* Allows all IT */ 
_mask(1); 

assert(argc == 3); 
numCyl = atoi(argv[1]) ; 
numSec = atoi(argv[2]) ; 

buffer = malloc(sizeof(char) *HDA_SECTORSIZE); 
assert(buffer); 

read_sector(numCyl , numSec , buffer); 

for(i=0;i<HDA_SECTORSIZE;i++) 
    printf("%01X\n", buffer[i]); 

free(buffer) ; 

return EXIT_SUCCESS ; 
} 
+1

*リンクエラー*のようです。適切なライブラリとリンクするには、gccで適切な '-lmy_library_name'パラメータが必要です。 – chrisaycock

+0

は正確なエラーメッセージを表示します – pm100

答えて

2

は、関数の定義を追加しません、彼らの宣言だけです。定義を追加するには、

  1. コンパイラコマンドに定義するソースファイルを追加します。
  2. オブジェクトファイル(既にコンパイル済みのファイル)をコンパイラコマンドに追加します。
  3. 外部の静的ライブラリまたは共有ライブラリにリンクします。

あなたの質問には、具体的な情報が含まれていません。具体的にはread_sector()とは何ですか?しかし、あなたの現在の問題に対する一般的な答えはこれです。

関連する問題