Chinaunix首页 | 论坛 | 博客
  • 博客访问: 753661
  • 博文数量: 274
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 862
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-24 15:31
个人简介

不合格的程序猿

文章分类

全部博文(274)

文章存档

2019年(3)

2018年(1)

2017年(4)

2016年(160)

2015年(106)

我的朋友

分类: LINUX

2016-02-25 10:33:40

如何同时同时使用动态和静态库链接,在GCC指令参数中具体参数如下: 
    -Wl,-Bstatic -L/usr/local/sqlite-arm-linux/.libs -lsqlite -Wl,-Bdynamic -L/usr/local/arm/3.3.2/lib 
  
 具体用途解释:sqlite库静态连接,其它库动态连接。 
-Wl,-Bstatic 与-Wl,-Bdynamic参数,从字面意义上可以理解,有静态和动态的意思,但是具体的真正规则在查找了GCC的原版手册上有说明。 
  
原文: 
Note - if the linker is being invoked indirectly, via a compiler driver (eg gcc) then all the linker command line options should be prefixed by -Wl, (or whatever is appropriate for the particular compiler driver) like this: 

?
1
gcc -Wl,--startgroup foo.o bar.o -Wl,--endgroup
   
This is important, because otherwise the compiler driver program may silently drop the linker options, resulting in a bad link. 

实际上主要针对隐式应用LINKER的参数,用“-Wl,”来标识,,“--startgroup foo.o bar.o -Wl,--endgroup”表示一组,,-Bstatic -Bdynamic 作为关键字与-WL,不可分,在GCC连接库时,默认链接是动态链接,现在用上面的指令限制在链接sqlite库时采用静态链接。 
  
-Bstatic 还有三个写法: -dn和-non_shared 和-static 

-Bdynamic 还有两个写法:-dy 和-call_shared

上面参数“-L/usr/local/sqlite-arm-linux/.libs ”放不放在-Wl,...之间无所谓,因为它只是提供了sqlite动静态库的位置。可以改成下面的参数形式,更直观。 

?
1
-L/usr/local/sqlite-arm-linux/.libs -L/usr/local/arm/3.3.2/lib -Wl,-dn -lsqlite -Wl,-dy

-Wl,-dn 和 -Wl,-dy成对出现才能起到标题所说的作用。   

关于-Wl,后面的参数还有很多,全部明白我也不能。

还有一个问题值得注意,在-Wl,后面不能有空格,否则会出错! 

关于-Wl,option 说明还有一段说明 

GCC命令参数的英文原文 

-Wl,option 

Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas. 

传递参数option作为linker的一个参数,如果option包含逗号,将在逗号处分割成几个参数。 

例如: 

-Wl,-dn –lsqlite 


-dn 开始静态链接 


-lsqlite 静态链接sqlite库 


静态链接完后,然后需要动态链接 


-Wl,-dy 


重新开始动态链接。
阅读(644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~