Linux下g++编译与使用静态库和动态库的方法
在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
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动态库函数的详解
- Linux静态库与动态库实例详解
- 详解dll动态库的开发与调用及文件的读写小程序
- android studio2.3如何编译动态库的过程详解
- Linux环境g++编译GDAL动态库操作方法
- 解决Linux程序编译链接动态库版本的相关问题
- xcode 详解创建静态库和动态库的方法
- 浅谈Linux C语言动态库及静态库
- c++实现加载so动态库中的资源
- linux 程序、动态库、静态库内部添加版本号和编译时间详解
- 从源码编译Android系统的Java类库和JNI动态库的方法
- C#调用非托管动态库中的函数方法
- Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法
- 动态库调用静态库示例讲解
- linux生成(加载)动态库静态库和加载示例方法
- 深入探讨Linux静态库与动态库的详解(一看就懂)
- 分析Windows和Linux动态库
- 在动态库和静态库中使用模板(dynamic libraries ,static libraries)
- [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)
- Linux下g++编译与使用静态库和动态库
- Linux下g++编译与使用静态库和动态库
- Linux下g++编译与使用静态库和动态库
- Linux下g++编译与使用静态库和动态库
- Linux下g++编译与使用静态库和动态库(仅命令)
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
- linux 下静态库和动态库的创建,编译,和使用
- linux下,动态库和静态库的编译方法(实例说明)
- Linux编译多个不同目录下的文件以及静态库、动态库的使用
- linux下静态库、动态库的编译和使用
- linux中编译静态库(.a)和动态库(.so)的基本方法
- linux中编译静态库(.a)和动态库(.so)的基本方法
- Linux动态库和静态库的建立及使用方法
- Linux下编译、使用静态库和动态库 自己测过的
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- linux 静态库(.a)、动态库(.so)的创建生成和使用方法
- linux中编译静态库(.a)和动态库(.so)的基本方法_only you
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
- linux 动态库和静态库编译链接方法