- 论坛徽章:
- 0
|
大家好:
我遇到一个问题突然不太清晰,就是说头文件和源文件的问题。
为了搞清楚之间的关系,我写了三个文件,分别为and.h and.c main.c
//and.h
int and(int, int);
//main.c
#include "and.h"
#include <stdio.h>
int main(void)
{
int a, b, c;
printf(" lease Input a , b:\n" ;
scanf("%d %d",&a, &b);
c = and(a, b);
printf("The Result is %d\n", c);
return 0;
}
//and.c
int and(int a, int b)
{
int c;
c = a + b;
return c;
}
当使用gcc main.c and.c -o main,毫无疑问可以正确编译出想要的结果。
1.但是实际上没写#include "and.h",也是可以编译的,我并没有在main函数声明这个函数,请问这是为什么,我看过一个帖子说用头文件声明的函数默认是以extern方式声明的,但是我在使用之前并没有声明,为何也可以正确编译,这样头文件的声明的意义好像就没有了,不知道我错在哪里?
2.我使用gcc -c and.c -o and.o, ar -rs liband.a and.o,将OBJ文件做成静态链接库,我想看看这种方式如何链接的,我使用gcc -c main.o -o main.o, gcc main.o -L"./“ -o main(liband.a在当前目录),但是不成功,报错如下:
main.o: In function `main':
main.c .text+0x42): undefined reference to `and'
collect2: ld 返回 1
但是使用gcc main.o liband.a -o main,可以编译出程序,所以我比较奇怪,为什么指定lib文件夹不成功。
3.对于#include <stdio.h>这种系统库,我没有在export的环境变量中看到,所以我想请问如何找到的对应的库和头文件。
希望大家帮帮忙,谢谢。 |
|