加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

Linux下g++编译与行使静态库和动态库的要领

发布时间:2021-01-11 06:17:13 所属栏目:创业 来源:网络整理
导读:在windows情形下,我们凡是在IDE如VS的工程中开拓C++项目,对付天生和行使静态库(*.lib)与动态库(*.dll)也许都已经较量认识,可是,在linux情形下,则是另一套模式,对应的静态库(*.a)与动态库(*.so)的天生与行使方法是差异的。刚开始也许会不顺应,

在windows情形下,我们凡是在IDE如VS的工程中开拓C++项目,对付天生和行使静态库(*.lib)与动态库(*.dll)也许都已经较量认识,可是,在linux情形下,则是另一套模式,对应的静态库(*.a)与动态库(*.so)的天生与行使方法是差异的。刚开始也许会不顺应,可是用多了应该会风俗这种行使,由于步调上并没有VS下设置那么繁琐。

下面就别离总结下linux下天生并行使静态库与动态库的要领:(因为是C++项目,以是编译器用的g++,可是与gcc的行使是相通的)

起首是筹备事变,把我们必要封装成库文件的函数的头文件与源文件写好,如下:

//myAPI.h 
int ADD(int a,int b); 
int MINUS(int a,int b); 
//myAPI.cpp 
#include "myAPI.h" 
 
int ADD(int a,int b){ 
  return a + b; 
} 
 
int MINUS(int a,int b){ 
  return a - b; 
} 

接下来筹备一个测试用的主函数源文件:

//main.cpp 
#include "myAPI.h" 
#include <iostream> 
 
int main(){ 
  std::cout << "1 + 1 = " << ADD(1,1) << std::endl; 
  std::cout << "1 - 1 = " << MINUS(1,1) << std::endl; 
  return 0; 
} 

最后,先编译我们的 myAPI.cpp 文件天生 myAPI.o 方针文件

g++ -c myAPI.cpp 

1.天生静态库并行使

Linux下用天生静态库的呼吁 ar 处理赏罚 myAPI.o 文件天生静态库文件,天生的库文件应遵循类型,及linux下库文件加“lib”前缀。以是针对本例,通过如下一条呼吁即可天生 libmyAPI.a 静态库:

ar crv libmyAPI.a myAPI.o 

接下来即可在项目编译进程中操作静态库了,此时 myAPI.cpp 这个库函数的界说文件已经不必要了。main.cpp 编译呼吁如下(留意,依靠的静态库文件要放在被依靠项后头):

g++ main.cpp libmyAPI.a -o output 

编译通事后即可运行可执行文件 output , 此时 libmyAPI.a 也已经是不必要的了。执行呼吁并输出功效如下:

./output 

Linux下g++编译与行使静态库和动态库的要领

2.天生动态库并行使

linux下编译时通过 -shared 参数可以天生动态库(.so)文件,如下

g++ -shared -fPIC -o libmyAPI.so myAPI.o 

天生的动态库在编译时必要声明,运行时必要被依靠。声明如下

g++ main.cpp -L. -lmyAPI -o output  

”-L.”标志汇报G++函数库也许位于当前目次;行使”-lmyAPI”标志来汇报G++驱动措施在毗连阶段引用共享函数库libmyAPI.so。

行使时假如提醒如下错误,则将 libmyAPI.so 移到 /usr/lib 目次下即可:

./output 

Linux下g++编译与行使静态库和动态库的要领

以上这篇Linux下g++编译与行使静态库和动态库的要领就是小编分享给各人的所有内容了,但愿能给各人一个参考,也但愿各人多多支持编程小能力。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读