gcc编译静态库和动态库,gcc链接静态库和动态库

  gcc编译静态库和动态库,gcc链接静态库和动态库

  今天,一个同事编译静态库,我也趁此机会在温习一下,先谷歌一下,然后在自己实验。

  首先,在网上抄个例子,内容如下:

  1:建静态库

  /*hellos.h*/

  #ifndef_HELLO_S_H

  #define_HELLO_S_H

  作废打印(char * str);

  #endif

  /*hellos.c*/

  #包含"你好"

  voidprintS(char*str){

  printf(printinstaticway:%s ,str);

  }

  输入命令:

  海合会

  arcqslibhellos.ahellos.o

  于是得到了libhellos.a这么一个静态链接库

  2:主程序

  /*main.c*/

  #包含标准视频

  #包含"你好"

  main(){

  char*text=HelloWorld! n ;

  印刷品(文字);

  }

  编译链接:

  海湾合作委员会。c-static-l .-lhellos

  然后运行你好可以看到输出

  printinstaticway:HelloWorld!

  删除libhellos.a和你好。*后,程序仍然正常运行。

  下面再来看动态链接

  3:建动态库

  /*hellod.h*/

  #ifndef_HELLO_D_H

  #定义_你好_D_H

  void printd(char * str);

  #endif

  /*hellod.c*/

  #包含"你好"

  voidprintD(char*str){

  printf(printindynamicway:%s ,str);

  }

  输入命令:

  gcc-共享-olibhellod。你好。c

  于是得到了libhellod.so这么一个动态链接库

  4:主程序

  /*main.c*/

  #包含标准视频

  #包含"你好"

  main(){

  char*text=HelloWorld! n ;

  printD(文本);

  }

  编译链接:

  gcc-ohellomain.c-L.-lhellod

  原文中存在一定错误,我已经修订,并且最会运行的话,需要设置动态库执行路径

  否则出现下述错误:/你好:加载共享库时出错:libmyhello.so:无法打开共享对象文件:没有这样的文件或目录

  当设定了LD _库_路径或者放在/usr/lib和/库后,又出现下面的错误:/你好:加载共享库时出错:/usr/lib/libhello.so:无法在重定位块后还原段保护:权限被拒绝

  这是防火墙引起的,修改如下:

  chcon-t texrel _ shlib _ t/usr/lib/lib你好。因此

  之后,运行,好的。

  下面说一下混合编程:

  /*main.c*/

  #包含标准视频

  #包含"你好"

  #包含"你好"

  main(){

  char*text=HelloWorld! n ;

  印刷品(文字);

  printD(文本);

  }

  上面的文章又说错了,自己谷歌一下,某人如下说:

  在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。使用方式为:

  gcc test.cpp -L. -ltestlib

  如果当前目录有两个库libtestlib.so libtestlib.a则肯定是连接libtestlib.so。如果要指定为连接静态库则使用:

  gcc test.cpp -L. -static -ltestlib

  使用静态库进行连接。

  当对动态库与静态库混合连接的时候,使用-静态会导致所有的库都使用静态连接的方式。这时需要作用-西城的方式:

  gcc test.cpp -L. -Wl,-Bstatic -ltestlib -Wl,-Bdynamic -ltestlib

  【本段文字来自:http://博客。。net/lapal/archive/2010/04/13/5482277。aspx】

  在转他说的:http://博客。。net/tenfyguo/archive/2010/07/15/5737974。文件

  至此,解决该类问题。

  附带几篇不错的文章:

  http://博客。163 .com/xychenbaihu @ yeah/blog/static/13222965520101023104745738/

  http://www.cublog.cn/u3/119070/showart_2379190.html

  http://blog..net/tenfyguo/archive/2010/07/15/5737974.aspx

  http://www.linuxeden.com/html/develop/20100326/94297.html

  http://博客。。net/JsuFcz/archive/2009/11/07/4784038。aspx】pS:这小子的文章前面的还好,后面可给我害惨了】

gcc编译静态库和动态库,gcc链接静态库和动态库