c++动态/静态库链接顺序

 1. gcc中库的链接顺序是从右往左进行,所以要把最基础实现的库放在最后,这样左边的lib就可以调用右边的lib中的代码。同时,当一个函数的实现代码在多个lib都存在时,最左边的lib代码最后link,所以也将最终保存下来。

2. 优先链接动态库

3. 强制使用静态库,直接使用静态库名字 gcc test.cc libxx.a

 

-L选项指定要搜索库的路径,-l选项指定要链接的库的名称,-o选项指定输出文件的名称。-L 、-l 后可以有空格 也可以不要空格

g++ main.cpp -o main -L /path/to/library -l library_name  

g++ main.cpp -o main -static -L /path/to/library -l library_name  // 如果动态库.so与静态库.a同时存在,-static指定链接静态库.a,不指定时优先链接动态库so

当使用绝对路径链接时可以去掉 -L 和-l 参数,直接使用库名libxxx.a 或libxxx.so

链接示例:

g++ main.cpp  -o main -L/home/user/lib -lxxx  建议使用这种,标准方式 

g++ main.cpp -o main /home/user/libxxx.a     或 g++ main.cpp -o main -L/home/user/  /home/user/libxxx.a     绝对路径方式 

g++ main.cpp -o main /home/user/libxxx.so   或 g++ main.cpp -o main -L/home/user/  /home/user/libxxx.so   绝对路径方式 

注意 g++ main.cpp -o main -L/home/user/  libxxx.so 和 g++ main.cpp -o main -L/home/user/  libxxx.a 是非法的

 

当前路径下链接时, -L. 代表在当前路径进行搜索

g++ main.cpp -L. -lxxx -o main   标准方式

g++ main.cpp libxxx.a -o main    绝对路径方式 

g++ main.cpp libxxx.so -o main   绝对路径方式 

注意此时 g++ main.cpp -L. libxxx.a -o main 和 g++ main.cpp -L. libxxx.so -o main 不会报错,是合法的

 
posted @ 2022-11-30 11:01  wieneralan  阅读(583)  评论(0编辑  收藏  举报