gcc编译器工具一般位于/usr/bin或者/usr/local/bin目录,但它会从其它位置运行各种编译器支持的应用程序,这个位置可能是
/usr/lib/gcc-lib/目录,GNU C/C++编译器的各个工具和GNU专用头文件都保存在这里。
头文件,一般位于/usr/include,包含头文件编译:gcc -I/指定路径/include hellworld.c
库文件,一般位于/lib或者/usr/lib,编译额外目录的库文件:gcc -L/指定目录 -l库名 helloworld.c
.a为静态库,.so为共享库(动态库)
静态库的生成及调用:(1)首先编写一个.c文件add.c,内容如下:
int add(int x, int y)
{
return x+y;
}
首先将其加-c选项编译为add.o文件:gcc -c add.c
(2)写一个add的头文件add.h,包含add的外部声名,内容如下:
int add(int, int);
(3)写一个主函数,test.c,内容如下:
#include
#include "add.h" //这里是注意点,不要忘了包含相关函数的头文件。
int main(void)
{
int sum = add(3, 4);
printf("sum: %d\n", sum);
return 0;
}
gcc -c test.c 生成test.o
现在如果不用静态库其实已经可以用gcc -o app test.o add.o就可以生成可执行文件app了。
(4)生成静态库
ar crv libadd.a add.o
这样就生成了libadd.a静态库,*.a当然可以包含很多个*.o文件,这里方便演示只定了一个*.o文件。
(5)
gcc -o app test.o libadd.a
(注意*.a文件不能放*.o前面,这样子编译,*.a不一定要遵循命名格式)
或者
gcc -o app test.o -L. -ladd
(-L.表示除了搜索标准C语言库外还要搜索当前目录, 也可以指定 -L/root/其它目录, -ladd 表明加载libadd.a库)
动态库的生成及调用:
(1)首先编写一个.c文件add.c,内容如下:
int add(int x, int y)
{
return x+y;
}
编译生成*.so动态库:gcc -fPIC -shared libadd.so add.c
(2)写一个主函数,test.c,内容如下:
#include
//#include "add.h" //动态库不需要有.h文件
int main(void)
{
int sum = add(3, 4);
printf("sum: %d\n", sum);
return 0;
}
gcc -o app test.c libadd.so 生成app可执行文件或gcc -o app test.c -L. -ladd也行(-L.表示除了搜索标准C语言库外还要搜索当前目录,
也可以指定 -L/root/其它目录, -ladd 表明加载libadd.a库))。
如果运行app出现无法找到*.so文件,请把*.so拷到/usr/lib目录下即可。