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

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

598936826e57aefa32674df0b7993a61.png

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

cf8ba1fe0a6c3a4bf1f376be685e0372.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家用电器如何计算功率和消耗的度数

计算公式&#xff1a;((U*I)/1000)*t 说明&#xff1a; 这里计算的都是电器的额定功率、额定电压、额定电流。U 是电压&#xff1b;I 是电流&#xff1b;t 是时间&#xff0c;单位是小时&#xff1b;U*I 得到的是电功率&#xff0c;例如电压12v&#xff0c;电流5A&#xff0c;…

构建器设计模式_创新设计模式:构建器模式

构建器设计模式以前我们看过工厂和抽象工厂模式。 这些模式可以达到目的&#xff0c;并且确实有用&#xff0c;但是在某些用例中&#xff0c;我们必须创建一个非常复杂的对象&#xff0c;并且创建它需要不同的步骤&#xff0c;每个步骤都需要不同的操作。 在这种情况下&#xf…

在线maven托管_使用Amazon s3托管您的Maven工件

在线maven托管如果您使用Amazon Web Services并将Java用于项目&#xff0c;则Amazon S3是托管团队工件的理想场所。 它很容易设置&#xff0c;而且很便宜。 如果您对它们的功能不特别感兴趣&#xff0c;那么它比设置现有存储库选项&#xff08;jfrog&#xff0c;nexus&#xf…

英语单词如何看字母划分音节

音节划分是读准单词的基本前提之一&#xff0c;划分音节虽麻烦但熟能生巧&#xff0c;在英语交流或阅读时&#xff0c;经常会碰到不认识的单词或专有名称&#xff0c;如果你懂得了音节的划分&#xff0c;那再难的单词你也会读。 1、音节划分。 英语中以元音来划分音节&#xf…

layui绑定json_JSON绑定:概述系列

layui绑定jsonJSON绑定的Java API&#xff08;JSON-B&#xff09;1.0增强了Java EE平台对JSON数据交换格式的整体支持。 事实证明&#xff0c; 用于JSON处理的Java API&#xff08;JSON-P&#xff09;1.1十分流行&#xff0c;它们共同构成了完美的合作伙伴&#xff0c;填补了Ja…

英文单词的音节分类

绝对开音节 以发音的元音字母结尾的叫绝对开音节&#xff0c;且这个元音字母发的是自己本音。例如&#xff1a;he /hi:/ 和 go /gəu/ 相对开音节 一个辅音字母加上不发音的元音字母&#xff08;通常是字母 e&#xff09;结尾的叫相对开音节&#xff0c;其实就是以不发音的元…

java捕捉了异常_java 异常捕获与异常处理

try{会产生异常的代码}catch(出现异常的类型 e){异常出现后处理的方法}一旦异常出现又没有异常处理&#xff0c;程序就会中断。public static void main(String[] args) {try {int num 10 / 0;System.out.println(num);} catch (ArithmeticException e) {System.out.println(&…

2018年4月13日_Java的最新发展– 2018年4月下旬

2018年4月13日本周Java领域有一些最新的发展&#xff0c;我在本文中总结了其中的一些。 我们知道的JavaOne的终结 Stephen Chin在帖子“ JavaOne活动扩展了更多的曲目&#xff0c;语言和社区&#xff0c;并有了新名称 ”中写道&#xff1a;“ JavaOne会议正在扩展&#xff0c;…

Windows 系统下通过命令将本地文件上传至远程 Linux 主机的指定目录下

这里是借助文件传输客户端 putty 的命令来上传文件。 第一步&#xff1a;下载安装 putty 第二步&#xff1a;通过命令终端进入 putty 的主目录下&#xff0c;即进入 D:\puggy 目录下&#xff0c;该目录下含有多个可执行文件&#xff08;以 .exe 为后缀名的文件&#xff09; 第…

java读取codetable_解析Java对象的equals()和hashCode()的使用

解析Java对象的equals()和hashCode()的使用前言在Java语言中&#xff0c;equals()和hashCode()两个函数的使用是紧密配合的&#xff0c;你要是自己设计其中一个&#xff0c;就要设计另外一个。在多数情况 下&#xff0c;这两个函数是不用考虑的&#xff0c;直接使用它们的默认设…

jvm体系结构_JVM体系结构:JVM中的执行引擎

jvm体系结构各位读者好&#xff01; 在JVM系列的上一篇文章中&#xff0c;开发人员了解了虚拟机的ClassLoader和Runtime Data Areas组件。 本教程将帮助开发人员正确理解JVM中的执行引擎 。 1.简介 在继续之前&#xff0c;让我们看一下Java虚拟机及其基本特征。 1.1什么是Jav…

如何才能不改变图片的像素大小,只改变图片的文件大小

如图&#xff0c;有一张这样的图片&#xff0c;我们需要对它进行压缩&#xff1a; 处理前该图片的像素尺寸和文件大小如图所示&#xff1a; 接着我们使用PS打开该图片&#xff0c;如果不想改变尺寸大小&#xff0c;只改变文件大小。点击菜单【文件】->【存储为web和设备所…

java通用编码规范考试_《java编码规范考试题答案》.doc

一、单选题1. 如下关于集合类的描述错误的是 BA. 含有集合意义的属性命名&#xff0c;尽量包含其复数的意义B. 集合中的数据不需要释放&#xff0c;垃圾回收器会自动回收C. 集合必须指定模板类型D. 使用集合类时要设置初始化容量2. 关于线程以下说法错误的有BA. 新起一个线程&a…

Alfred 功能组合键/快捷键

文章目录快捷键如何设置呼出热键参考文章快捷键 快捷键说明Fn在选中的文件或者目录上点击 Fn 键可以触发其额外的操作&#xff0c;可以在【Actions】里面进行配置Command Enter可以进入当前文件所在的文件夹中Space 搜索词查找指定相关的文件&#xff0c;选中后按回车打开此…

vaadin教程_Vaadin教程

vaadin教程1.简介 当您是后端开发人员时&#xff0c;您会听到别人说您无法创建内置HTML的UI页面并且无法在CSS中设置样式而引起的痛苦。 就像成为后端开发人员一样&#xff0c;它具有已知的局限性&#xff0c;即我们可以播放和运行大型生产后端应用程序&#xff0c;但不能创建漂…

c 和java互相验签_C椭圆曲线签名 用java验签

C椭圆曲线签名 用java验签&#xff0c;java应该用什么类&#xff0c;new X509EncodedKeySpec( hex2Bytes(publicKey) ) 一直报错签名&#xff1a;294236F3FEA929A45A3544A40BE7546CCE71DD52B5B488C12C05A440440B21120C3F127FE4B53326DCE1AAE393B36EB1B57C09EF7B3230760F5C493F6…

混合多云架构_使用混合多云每个人都应避免的3个陷阱(第3部分)

混合多云架构每天都在肆意宣传云&#xff0c;但每个人都应避免三个陷阱。 从云&#xff0c;混合云到混合多云&#xff0c;您都被告知这是确保业务数字化未来的一种方式。 您必须做出的这些选择不会排除提高客户体验和敏捷交付这些应用程序的日常工作。 让我们开始一段旅程&am…

MacOS的Automator(自动操作)实用案例详解/自定义程序/自定义服务

文章目录创建新建文本文件的服务创建批量开启多个应用程序的服务创建批量开启多个应用程序的程序创建退出所有程序的服务如何删除/隐藏创建的服务删除服务隐藏服务创建新建文本文件的服务 打开 Automator 后&#xff0c;选择「快速操作」后&#xff0c;点击下方按钮「选取」&a…

用来编译java源文件的工具_基于阿里开源yugong工具类,动态编译Java源文件

适用场景&#xff1a;Java应用满足用户自定义需求场景实例代码&#xff1a;测试用例(DynamicCompileTest)package com.taobao.yugong.common;import java.io.IOException;import java.util.List;import junit.framework.Assert;import org.apache.commons.io.IOUtils;import or…

MacOS 下如何创建文本文件

文章目录通过 MacOS 自带的 Automator 创建自动化服务程序实用 Finder 扩展工具 - New File Menu通过 MacOS 自带的文本编辑程序创建通过 MacOS 自带的 Automator 创建自动化服务程序 欲知此方法请猛戳《MacOS 的 Automator 实用案例详解》 实用 Finder 扩展工具 - New File …