Linux下g++编译以及使用静态库和动态库的方法详解
发布时间 - 2017-05-28 00:00:00 点击率:次下面小编就为大家带来一篇php.cn/wiki/1497.html" target="_blank">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" #includeint 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
# 小编
# 时需
# 放在
# 不需要
# 则是
# 可在
# 给大家
# 做个
# 刚开始
# 不需
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
PHP 500报错的快速解决方法
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Laravel如何使用withoutEvents方法临时禁用模型事件
如何快速搭建高效香港服务器网站?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
java ZXing生成二维码及条码实例分享
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
python中快速进行多个字符替换的方法小结
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
HTML 中动态设置元素 name 属性的正确语法详解
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
制作企业网站建设方案,怎样建设一个公司网站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
Java解压缩zip - 解压缩多个文件或文件夹实例
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel中的Facade(门面)到底是什么原理
Laravel如何生成API文档?(Swagger/OpenAPI教程)
如何用腾讯建站主机快速创建免费网站?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
JavaScript如何实现路由_前端路由原理是什么
Swift中switch语句区间和元组模式匹配
网站制作价目表怎么做,珍爱网婚介费用多少?
Laravel如何配置Horizon来管理队列?(安装和使用)
教你用AI润色文章,让你的文字表达更专业
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
网站建设整体流程解析,建站其实很容易!
Android利用动画实现背景逐渐变暗
如何快速搭建虚拟主机网站?新手必看指南
如何用西部建站助手快速创建专业网站?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
微信小程序 闭包写法详细介绍
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
手机网站制作与建设方案,手机网站如何建设?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
如何在 React 中条件性地遍历数组并渲染元素
利用JavaScript实现拖拽改变元素大小
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
零基础网站服务器架设实战:轻量应用与域名解析配置指南
js实现点击每个li节点,都弹出其文本值及修改

