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

本文介绍了在Linux环境下如何使用g++编译和使用静态库(*.a)和动态库(*.so)。首先编写包含函数的头文件和源文件,然后分别通过ar命令生成静态库libmyAPI.a和使用g++的-shared参数生成动态库libmyAPI.so。在链接静态库时,静态库文件不需要在运行时存在;而动态库在编译时需要声明(-lmyAPI),运行时需要动态库文件在系统路径中。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值