下面小编就为大家带来一篇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

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

g++ 编译mysql动态库_Linux下g++编译以及使用静态库和动态库的方法详解相关推荐

  1. linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解

    摘要 腾兴网为您分享:linux下lftp连接ftp服务器进行上传与下载的方法详解,中英翻译,中建在线,掌上看家,银行帮等软件知识,以及微信一键转发工具,小学英语冀教版,正是在下表情包,易问电信,万能 ...

  2. navicat mysql 计划任务_navicat创建MySql定时任务的方法详解

    navicat创建MySql 定时任务详解 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的" ...

  3. mysql master 配置_MySQL双Master配置的方法详解

    刚刚抽空做了一下MYSQL 的主主同步.把步骤写下来,至于会出现的什么问题,以后随时更新.这里我同步的数据库是TEST1.环境描述.主机:192.168.0.231(A)主机:192.168.0.23 ...

  4. mysql 账户管理_Mysql账户管理原理与实现方法详解

    本文实例讲述了Mysql账户管理原理与实现方法.分享给大家供大家参考,具体如下: 账户管理 在生产环境下操作数据库时,绝对不可以使用root账户连接,而是创建特定的账户,授予这个账户特定的操作权限,然 ...

  5. java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解

    摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...

  6. Navicat的mysql远程登录方法详解

    Navicat的mysql远程登录方法详解 工具和前提 远程连接方法 疑惑问题 报错汇总 关闭并删除用户 引用 工具和前提 1.均在Navicat上面进行操作: 2.Navicat15的版本,本地数据 ...

  7. cmd连接mysql的方法详解

    cmd连接mysql的方法详解 首先需要进入mysql的安装文件夹bin目录下:cd + C:\Program Files\MySQL\MySQL Server 5.5\bin 连接:mysql -h ...

  8. mysql回滚用法_Mysql误操作后利用binlog2sql快速回滚的方法详解

    前言 在日常工作或者学习中,操作数据库时候难免会因为"大意"而误操作,需要快速恢复的话通过备份来恢复是不太可能的,下面这篇文章主要给大家介绍关于Mysql误操作后利用binlog2 ...

  9. jdbc mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解

    JDBC是Java程序连接和访问各种数据库的API,它可以提供Java程序和各种数据库之间的连接服务,下面是爱站技术频道小编为大家带来的JDBC实现Mysql自动重连机制的方法详解. 日志:using ...

最新文章

  1. vim-commentary 插件用法
  2. iOS UITouch 触摸事件处理
  3. Hadoop最常用的工具(SQL on Hadoop):Hive
  4. Machine Monitoring System Document
  5. 每日程序C语言10-欧几里德算法
  6. DataTable的Merge\COPY\AcceptChange使用说明
  7. libGDX-wiki发布
  8. LeetCode 970. 强整数
  9. 将字符串1/4转换成0.25 eval()
  10. python异常如何处理_python异常处理
  11. Android Studio 自定义字体显示英文音标
  12. 关于明小子QQ***
  13. AT32 XMC驱动PC卡/CF卡
  14. IT业台风警报(一)——望天
  15. 中国移动数据分析的七点经验
  16. 爬取电影《无双》影评数据,分析,可视化
  17. 全面屏/刘海屏及虚拟键适配--总结版
  18. 技术开放平台,推进开放银行布局
  19. opencv 图片上画一条线
  20. 气象站有哪几种类型?常见有以下四种型号!

热门文章

  1. 内存 增量数据持久_内存中数据模型和大数据持久性
  2. javaserver_如何在JavaServer Pages中使用Salesforce REST API
  3. 使用Spring Cloud HystrixCommands的功能Hystrix
  4. java 设计模式 示例_Java中的策略设计模式-示例教程
  5. couchbase_Couchbase 101:从Java应用程序创建视图(MapReduce)
  6. 在Spring中了解事务注释
  7. 以编程方式确定Java类的JDK编译版本
  8. 在jOOQ之上构建的RESTful JDBC HTTP服务器
  9. ZooKeeper,策展人以及微服务负载平衡的工作方式
  10. Spring Integration Java DSL示例–使用Jms名称空间工厂进一步简化