linux下编译自己的库文件实践
linux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows中的.obj文件 .so 为共享库,是shared object,用于动态连接的,和dll差不多 .a为静态库,是好多个.o合在一起,用于静态连接 .la为libtool自动生成的一些共享库,主要记录了一些配置信息. 1.创建静态.o库文件和.a库文件 [root@localhost study]# mkdir libtest [root@localhost study]# ls cc.c hello hello1 hello2 libtest [root@localhost study]# cd libtest/ [root@localhost libtest]# pwd /home/a/study/libtest [root@localhost libtest]# vim mylib.c [root@localhost libtest]# vim mylib.h [root@localhost libtest]# ls mylib.c mylib.h [root@localhost libtest]# cat mylib.c #include <stdio.h> void hello() { printf("This is my lib.n"); } [root@localhost libtest]# cat mylib.h extern void hello(); [root@localhost libtest]# vim test.c [root@localhost libtest]# ls mylib.c mylib.h test.c [root@localhost libtest]# cat test.c #include "mylib.h" int main() { hello(); return 0; } [root@localhost libtest]# gcc -Wall -g -c -o mylib.o mylib.c [root@localhost libtest]# ls mylib.c mylib.h mylib.o test.c [root@localhost libtest]# ar rcs mylib.a mylib.o [root@localhost libtest]# gcc -Wall -g -c test.c -o test.o [root@localhost libtest]# ls mylib.a mylib.c mylib.h mylib.o test.c test.o [root@localhost libtest]# gcc -g -o test test.o -L. -lmylib /usr/bin/ld: cannot find -lmylib collect2: ld 返回 1 [root@localhost libtest]# ls mylib.a mylib.c mylib.h mylib.o test.c test.o 名字要以lib开头,,:-) [root@localhost libtest]# mv mylib.a libmylib.a [root@localhost libtest]# ls libmylib.a mylib.c mylib.h mylib.o test.c test.o [root@localhost libtest]# gcc -g -o test test.o -L. -lmylib [root@localhost libtest]# ls libmylib.a mylib.c mylib.h mylib.o test test.c test.o [root@localhost libtest]# ./test This is my lib. [root@localhost libtest]# 2.动态链接库*.so文件 (1)、动态库的编译 [root@localhost study]# ls cc.c hello hello1 hello2 libtest [root@localhost study]# mkdir sharelib [root@localhost study]# ls cc.c hello hello1 hello2 libtest sharelib [root@localhost study]# cd sharelib/ [root@localhost sharelib]# vim so_test.h [root@localhost sharelib]# cat so_test.h extern void test_a(); extern void test_b(); extern void test_c(); [root@localhost sharelib]# vim test_a.c [root@localhost sharelib]# vim test_b.c [root@localhost sharelib]# vim test_c.c [root@localhost sharelib]# cat test_a.c #include <stdio.h> #include "so_test.h" void test_a() { printf("This is in test_a...n"); }
[root@localhost sharelib]# cat test_b.c #include <stdio.h> #include "so_test.h" void test_b()
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |