gcc同时连接静态和动态库
2016-12-06 17:58
453 查看
GCC默认的选项,在连接连接库时,默认的采用动态连接。如果采用静态连接需要添加-static参数,但是这个参数对整个GCC连接命令同时有效,即指定的库全部采用静态连接的方式。
如何同时同时使用动态和静态库链接,在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:
This is important, because otherwise the compiler driver program may silently drop the linker options, resulting in a bad link.
实际上主要针对隐式应用LINKER的参数,用“-Wl,”来标识(l为小写的L),,“--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动静态库的位置。可以改成下面的参数形式,更直观。
-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
重新开始动态链接。
如何同时同时使用动态和静态库链接,在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:
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,”来标识(l为小写的L),,“--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动静态库的位置。可以改成下面的参数形式,更直观。
-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
重新开始动态链接。
相关文章推荐
- 初识Node
- 电脑关机爬虫继续--screen
- mysql5.7安装
- C++ This 详解
- Nginx实战(四) 限速功能
- golang 读取execl数据
- objective-c的NSMutableDictionary增改删测试
- Ubuntu系统学习笔记-2.LNMP环境搭建
- 【php中的curl】php中curl的详细解说
- JDBC连接关闭之工具类
- CSS 气泡写法
- 怎样使用SharedPrefences来存储对象
- spring动态加入bean
- Hbase-1.2.4 javaAPI实现简单的类CRUD操作
- POJ 2376 Cleaning Shifts 笔记
- PreparedStatement之安全问题
- JavaScript的一些基础-数据类型
- SQLServer从入门到精通
- 求“最大连续段和”题目分析
- python连接SQL Server:Pymssql模块