学派吧-Linux下g++编译以及使用静态库和动态库的方法教程

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

学派吧-Linux下g++编译以及使用静态库和动态库的方法教程

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下g++编译以及使用静态库和动态库的方法详解的详细内容,更多请关注学派吧其它相关文章!

主题测试文章,只做测试使用。发布者:云大使,转转请注明出处:https://www.xp8.net/server/2788.html

(0)
打赏 微信扫一扫 微信扫一扫
云大使的头像云大使
上一篇 2018年12月19日 下午9:49
下一篇 2018年12月19日 下午9:49

相关推荐

  • Linux实例负载高问题排查和异常处理

    问题描述 在您使用ECS实例过程中,可能会遇到实例系统负载较高的情况,负载过高,可能会引发一系列异常问题,简单说明如下: CPU使用率或负载过高:一般来说,当CPU使用率≥80%时,定义为CPU使用率过高。CPU使用率持续过高,可能会导致实例运行速度变慢,自动关机或重启、无法登录等问题。 带宽使用率过高:一般来说,带宽使用率≥当前带宽80%时,定义为带宽使用…

    2024年9月28日
    1.5K00
  • ECS云服务器如何禁用公网IP-linux运维-学派吧

    本篇文章给大家带来的内容是关于ECS云服务器如何禁用公网IP,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 ECS云服务器如何禁用公网IP Linux关闭外网网卡的方法 首先使用ifconfig查看下公网的IP对应的网卡名称,这里查看到对应的是 eth1,然后使用 ifdown eth1 即可,然后测试 ping 下公网IP,无法 ping…

    服务器运维 2018年11月21日
    2.5K00
  • 如何处理Ping ECS实例的IP地址间歇性丢包-linux教程

    本篇文章给大家带来的内容是关于如何处理Ping ECS实例的IP地址间歇性丢包,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Ping ECS实例的IP地址间歇性丢包 问题描述 Ping ECS实例的IP地址间歇性丢包,ECS实例的网络一直处于不稳定状态 。 问题原因 系统中病毒。 解决方案 Ping外部存在丢包,但是延迟不大,排查不是带宽…

    服务器运维 2018年11月21日
    2.5K00
  • win2008 R2中安装MySQL出现ODBC连接器安装错误的解决教程-win教程-学派吧

    这篇文章主要介绍了win2008 R2中php.cn/php/php-tp-inst安装MySQL出现ODBC连接器安装错误,需要的朋友可以参考下 我今天打算在Windows server 2008 R2中安装MySQL,可是总是发现ODBC连接器安装错误,无论我采用MySQL的整体安装包,还是单独的ODBC连接器安装文件!! 最后上网搜索了很久,终于解决了…

    服务器运维 2018年12月2日
    3.0K00
  • 学派吧-详解win2008 IP安全策略下配置一个IP段的写法-windows教程

    这篇文章主要介绍了win2008 IP安全策略下配置一个IP段的写法,需要的朋友可以参考下 可以指定单个 IP 地址或者 IPv4 或 IPv6 地址的子网。若要指定子网,请使用与下面类似的语法输入 IP 地址: 192.168.1.0/24 正斜杠 (/) 后面的数字表示子网掩码中的位数。可能为 32 位。在本示例中,24 表示前三个八进制数是子网地址,最…

    服务器运维 2018年12月10日
    3.0K00

发表回复

登录后才能评论
联系我们

联系我们

18838889666

在线咨询: QQ交谈

邮件:xinyun@88.com

工作时间:周一至周五,9:30-18:30,节假日休息

添加微信
添加微信
分享本页
返回顶部
---------官方优惠叠加渠道折扣:通过我们购买腾讯云/阿里云,价格更低,服务更优。更有专业配置指导与服务。微信同步:18838889666----