对Linux环境动态库和静态库的一些基础知识做一些总结,

首先总结静态库的编译步骤。

1 先基于.cpp或者.c文件生成对应的.o文件

2将几个.o文件 使用ar -cr命令 生成libname.a文件

libname.a 为静态库, name 为静态库的名字,

可以根据模块功能命名。

举个例子

在当前目录下,有一个mymethod.h文件

在mymethod.cpp里实现这两个函数

在当前目录下有一个main.cpp文件

为了方便使用,将mymethod.cpp封装成静态库和动态库

首先将mymethod.cpp 编译成目标文件

g++ -c mymethod.cpp -o mymethod.o

然后根据目标文件生成静态库

ar -cr libmymethod.a mymethod.o

ar命令可以用来创建、修改库,也可以从库中提出单个模块

-c 选项表示 创建一个库。不管库是否存在,都将创建

-r 选项表示 将模块插入库,如果库中有对应的模块,那么进行更新

如果把多个.o文件插入库.a里,只需要在后面用空格分开写出来

格式

ar -cr 静态库libname.a  name1.o name2.o

静态库的命名有规则,格式为lib+库名+.a

生成静态库libmymethod.a后,

编译main.cpp 连接静态库生成可执行文件main

g++ main.cpp -o main -I ./ -L ./ -lmymethod

-I选项表示头文件路径

-L表示静态库或者动态库的路径

链接静态库写成 -l库名即可:-lmymethod

运行./main 可以输出结果

下面是动态库的编译

动态库的命名是lib+库名+.so

动态库需要使用-shared 选项以及-fPIC选项

g++ -c -fPIC mymethod.cpp -o mymethod.o

-fPIC表示代码是和地址无关的,不需要被不同模块重定位

然后根据目标文件生成动态库.so文件

g++ -shared -o libmymethodso.so mymethod.o

-shared 选项表示生成的是.so动态库文件

下一步是链接动态库

g++ main.cpp -o main -I ./ -L ./ -lmymethodso

此时不能直接运行./main否则会提示找不到对应的动态库

上面的步骤可以直接写成一句话

g++ -shared -fPIC mymethod.cpp -o libmymethodso.so

我们现在有几种方式配置动态库的路径

第一种

export LD_LIBRARY_PATH="./:$LD_LIBRARY_PATH"

这种方式将动态库路径配置到LD_LIBRARY_PATH,只是暂时生效

第二种

使用 ldconfig 机制(需 root 权限):

● 首先,在 /etc/ld.so.conf.d/ 下创建一个 .conf 文件,

如 libmymethod.conf ,内容为共享库所在目录的绝对路径

● 然后,运行 ldconfig

第一种比较简单,配置好后可以直接运行./main

第二种按照操作进入/etc/ld.so.conf.d/,

然后创建mymethod.conf

用vi打开mymethod.conf,添加动态库的绝对路径

/home/secondtonone/soando

最后运行ldconfig, 即可生效了。

这样就可以运行./main

现在对动态库路径配置做一个总结

解决共享库路径问题

gcc/g++ 编译期 :

● 使用 ­L 选项指定所需链接的共享库所在目录(如果共享库或其连

接文件位于 /usr/lib 、 /usr/local/lib 或由 LD_LIBRARY_PATH 指定

的目录下,则不需指定该选项)

● 使用 ­l 选项指定所需链接的共享库名称(无前缀、后缀)

程序运行期:

● 使用 LD_LIBRARY_PATH 环境变量来指定所需引用的共享库所在

目录 ( 临时指定或永久性写入相关文件,普遍适用于 UNIX 世界 )

● 使用 ldconfig 机制(需 root 权限):

● 首先,在 /etc/ld.so.conf.d/ 下创建一个 .conf 文件,

如 libmymethod.conf ,内容为共享库所在目录的绝对路径

● 然后,运行 ldconfig

我的公众号,谢谢关注下。

mysql.h 动态编译命令_Linux环境编译动态库和静态库总结相关推荐

  1. 动态库、静态库编译测试:含静态库链接动态库、静态库,动态库链接静态库、动态库

    本文的目的是测试各种类型库的编译后的使用效果,包括库又链接其他库的编译方法,使用方法,依赖性等. 太长不看版:请跳至文章最后的总结对比表. 一.内容包含: ①静态库libbb.a依赖静态库libaa. ...

  2. Linux下CMake简明教程(六)动态库和静态库的编译控制

    代码在git 有时只需要编译出动态库和静态库,然后等着让其它程序去使用.让我们看下这种情况该如何使用cmake.首先按照如下重新组织文件,只留下testFunc.h和TestFunc.c ├── CM ...

  3. 【转】C语言如何编译动态库与静态库?

    因为是别的论坛,不能直接转载,自己在这里再粘贴一下-- 转载网址:https://www.2cto.com/kf/201711/699202.html 关于动态库与静态库的作用这里就不在详细赘述了,重 ...

  4. 使用编译好的OPENNI2的动态库与静态库进行Kinect2.0的ONI格式视频流录制

    第一步 先安装KinectV2.0SDK SDK的安装包我已经在官网下载好了 在网盘链接:http://pan.baidu.com/s/1geXSecF 密码:w1tl 第二步  准备好开发所需的LI ...

  5. linux系统c++编译连接过程,动态库与静态库

    https://www.cnblogs.com/ucas/p/5778664.html(linux系统c++编译连接过程) http://www.cnblogs.com/skynet/p/337285 ...

  6. cmake编译动态库和静态库

    CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(hello)#添加源文件 aux_source_directory(./ DIR_SRCS)#设置编译参数 se ...

  7. Linux库概念及相关编程(动态库、静态库、环境变量)

    分文件编程: 好处:分模块编程思想,功能和责任划分清楚便与调试,main函数简洁,代码易于阅读. 编程时头文件有的是使用<>这个符号括起来的,有的是" "使用的是双引号 ...

  8. 关于VS环境下制作和使用静态库和动态库

    转载理由:虽然操作什么的很基础,不过作为初学还是很好的文章,手把手教学 关于VS2013下制作和使用静态库和动态库 引言 什么是库:库是写好的现有的,成熟的,可以复用的代码. 所谓静态.动态是指链接. ...

  9. linux系统中 库分为静态库和,Linux系统中“动态库”和“静态库”那点事儿-【经典好文】...

    今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在linux操作系统中,普遍使用E ...

最新文章

  1. Confluence 6 中样式化字体
  2. 转 无损转换Image为Icon
  3. Python练习1-文档格式化成html
  4. ASP中时间格式转换
  5. Linux零基础初级教程
  6. JSP简单练习-用Servlet获取表单数据
  7. Java基础之写文件——缓冲区中的多条记录(PrimesToFile3)
  8. Memcached - Base
  9. 语言 双线性内插_数位语音信号处理概论 Lesson6 语言模型
  10. AHT20温湿度传感器STM32-I2C驱动,替代DHT11/DHT12/AM2320/SHT20/SHT30,IIC代码兼容AHT10/15-MEMS温湿度传感器
  11. 怎么去除三角下拉_用什么方法可以有效去除外墙涂料?
  12. (三) 初识XMAL
  13. 2018-2019-1 20189213《Linux内核原理与分析》第五周作业
  14. web系统之猜数游戏——项目总结
  15. 计算机机房实训计划,计算机专业实习计划安排.docx
  16. python如何爬取煎蛋图片(js)
  17. 人月神话(三)——没有银弹
  18. 【UVA11478】Halum (最短路解差分约束)
  19. 亲测有效,一招解决错误:This application failed to start because not Qt platform plugin could be initialized.
  20. zipfile的压缩和解压缩

热门文章

  1. docker安装linux安装mysql_怎么启动mysql-linux 怎么安装mysql?怎么在docker搭建mysql8?docker安装mysql...
  2. php裁剪图片并上传源码,改写jcrop插件+php的图片上传实现与裁剪一体化
  3. 在无头单链表的一个非头节点前插入一个节点(C语言)
  4. 皮尔洛和c罗讲什么语言,皮尔洛:如果我跟C罗是队友 我可能能成历史助攻王
  5. 虚拟机中ubuntu可以使用显卡吗_在KVM下使用ubuntu19.10安装Anbox
  6. 计算机室内设计cad实践报告,cad实习报告3000字
  7. 龙贝格数值分析作业c语言,数值分析龙贝格实验报告.doc
  8. android 服务自动结束,Android服务自动停止
  9. java des3加密_JAVA加密算法(3)- 对称加密算法(DES、3DES、AES)
  10. 添加include文件路径_-isystem以及include_next的副作用