include 包含

来源:互联网 发布:淘宝店买卖流程及费用 编辑:程序博客网 时间:2024/05/17 02:17

比如一个文件main.c,其包含a.h,a.h对应一个a.c,那么1、如果直接编译main.c是否可以成功呢?(没有编译a.c),2、如果链接是否可以成功呢?

main.c定义如下:

#include "a.h"


int main(int argc,const char * argv[]) {


    printf("Hello, World!\n");


    call();

    

   return 0;

}

a.h定义如下:

#ifndef __test__a__

#define __test__a__


#include <stdio.h>


extern int a;


void call();


#endif /* defined(__test__a__) */


a.c定义如下:

#include "a.h"


int a=10;


void call()

{

    printf("abcdefg\n");

}


$ gcc -c main.c

成功

gcc -o main main.c

系统提示:

Undefined symbols for architecture x86_64:

  "_call", referenced from:

      _main in main-34107c.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

就是说a.c里面的call方法没有定义
这个时候编译a.c

$ gcc -c a.c

再链接a.o和main.o

$ gcc -o main main.o a.o

成功
执行main

$ ./main

输出

Hello, World!

abcdefg









0 0
原创粉丝点击