"); //-->
在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。使用方式为:
gcc test.cpp -L. -ltestlib
如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接静态库则使用:
gcc test.cpp -L. -static -ltestlib
使用静态库进行连接。
当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连接的方式。这时需要作用-Wl的方式:
gcc test.cpp -L. -Wl,-Bstatic -ltestlib -Wl,-Bdynamic -ltestdll
另外还要注意系统的运行库使用动态连接的方式,所以当动态库在静态库前面连接时,必须在命令行最后使用动态连接的命令才能正常连接
,如:
gcc test.cpp -L. -Wl,-Bdynamic -ltestdll -Wl,-Bstatic -ltestlib -Wl,-Bdynamic
最后的-Wl,-Bdynamic表示将缺省库链接模式恢复成动态链接。
其中用到的两个选项:-Wl,-Bstatic和-Wl,-Bdynamic。这两个选项是gcc的特殊选项,它会将选项的参数传递给链接器,作为链接器的选项。比如-Wl,-Bstatic告诉链接器使用-Bstatic选项,该选项是告诉链接器,对接下来的-l选项使用静态链接;-Wl,-Bdynamic就是告诉链接器对接下来的-l选项使用动态链接。下面是man gcc对-Wl,option的描述,
-Wl,option Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas. You can use this syntax to pass an argument to the option. For example, -Wl,-Map,output.map passes -Map output.map to the linker. When using the GNU linker, you can also get the same effect with -Wl,-Map=output.map.
下面是man ld分别对-Bstatic和-Bdynamic的描述,
-Bdynamic -dy -call_shared Link against dynamic libraries. You may use this option multiple times on the command line: it affects library searching for -l options which follow it. -Bstatic -dn -non_shared -static Do not link against shared libraries. You may use this option multiple times on the command line: it affects library searching for -l options which follow it. This option also implies --unresolved-symbols=report-all. This option can be used with -shared. Doing so means that a shared library is being created but that all of the library's external references must be resolved by pulling in entries from static libraries
linux 链接库文件出现“undefined reference to" 问题的解决方法
http://blog.csdn.net/u013897132/article/details/48156941
因此,我们需要注意,在链接命令中给出所依赖的库时,需要注意库之间的依赖顺序,依赖其他库的库一定要放到被依赖库的前面,这样才能真正避免undefined reference的错误,完成编译链接。
https://www.cnblogs.com/xingmuxin/p/11416518.html
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
关税引发2025年第一季度PC出货量同比增长 6.7%
555自动循环七色彩灯控制电路
Microchip MCU 简化模拟传感器设计
CES 2010:Powertech“不用插”的USB充电器
慕尼黑上海电子展对话安森美:无MCU车灯方案的技术革命与市场启示
555摇滚彩灯控制器电路
[推荐]给大家推荐一款内嵌8051单片机的无线收发器芯片及其开发系统
人形机器人直立行走工作原理
闪迪提议HBF取代HBM,在边缘实现 AI
[推荐]给大家推荐一款内嵌8051单片机的无线收发器芯片及其开发系统
555流水式彩灯控制电路
台积电24座新厂痛点在人力 英特尔重整后人才流向受关注
冲刺新品市占 三星拟停产旧规HBM
Protel 99 SE 视频教程 —— 第三节 库文件的操作
《ARM嵌入式系统选型指南》
台积电3nm更新:N3P量产,N3X步入正轨
Protel 99 SE 视频教程 —— 第一节 创建设计文档
PCB设计:金手指
Protel 99 SE 视频教程 —— 第四节 生成网络表文件
关于TFFS的FTL和NFTL的问题
555流动灯饰程序控制器电路
《ARM嵌入式系统系列教程》出版说明
vivo以完整技术生态,推动机器人走入家庭
《ARM嵌入式系统实验教程(三)》目录
555简易七色彩灯循环控制电路
[推荐]给大家推荐一款内嵌8051单片机的无线收发器芯片及其开发系统
[推荐]给大家推荐一款内嵌8051单片机的无线收发器芯片及其开发系统
Protel 99 SE 视频教程 —— 第二节 原理图设计系统的基本操作
《ARM嵌入式系统实验教程(一)》简介
《ARM嵌入式系统实验教程(三)扩展实验》目录