快速业务通道

linux下编译自己的库文件实践

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-20

  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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号