对xxx包含的未定义引用不起作用

时间:2016-10-31 21:12:43

标签: c gcc compilation compiler-errors

我正在尝试编译.c文件但是我得到了“未定义的引用”错误,即使我放了必要的包含。顺便说一句,你可以在我的代码的标题中看到,我对#include drive.h没有任何问题,但是使用#include硬件就像gcc忽略了这一行。

这是我的代码,谢谢你:)

顺便说一下,我正在编译: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 个答案:

答案 0 :(得分:2)

包含头文件不会添加函数的定义,只会添加它们的声明。要添加定义,请执行以下操作:

  1. 将定义它们的源文件添加到编译器命令中。
  2. 将对象(已编译的文件)文件添加到编译器命令。
  3. 链接到外部静态或共享库。
  4. 您的问题是,不包含帮助您的具体信息,例如read_sector()是什么?但是对你当前问题的一般回答是这样的。