使用g++创建动态库和静态库及其相关探索

目录

  • 使用g++创建动态库和静态库及其相关探索
    • 0.前期准备
    • 1.静态库创建及链接
    • 2.动态库创建及链接
    • 3.相关问题
      • 移动动态库后仍不能运行

0.前期准备

  • 首先我们建立头文件 “hello.h”

  • 内容如图:

  • 随后我们建立源文件 “hello.cpp”

  • 内容如图:

  • 最后我们建立源文件 “main.cpp”

  • 内容如图:

  • 我们使用 g++ -c 编译出.o文件。
    无论是动态库还是静态库,都得由.o文件创建,所以我们先编译出.o文件。

  • 结果如图:可以看到有 hello.o 文件

1.静态库创建及链接

  • 使用 ar crv 命令创立静态库。
  • 结果如图:建立出了静态库文件 libmyhello.a ,静态库文件后缀为.a 。
  • 使用 g++ 命令链接静态库
g++ main.cpp libmyhello.a -o main
  • 结果如图:生成了可执行文件main,且可以正常运行。
  • 删除静态库libmyhello.a,程序仍能运行,说明链接成功。
  • 结果如图:

2.动态库创建及链接

  • 使用 -shared -fPCI 命令创立动态库。
  • 结果如图:建立出了动态库文件 libtest.so ,动态库文件后缀为.so 。
  • 使用 g++ 命令链接动态库
g++ main.cpp -L. -ltest -o main
/*
-L代表so库目录,“-L.” 是当前目录, -I代表引用文件目录。main即为可执行文件
*/
  • 结果如图: 生成可执行文件main
  • 运行程序
  • 直接运行会报错:缺少文件。我们将动态库移动到/usr/lib 中即可
mv libtest.so /usr/lib
  • 随后即可正常运行(如果移动后仍不能运行,请看下文)

3.相关问题

移动动态库后仍不能运行

1.首先进入 /etc/ld.so.conf 文件

vim /etc/ld.so.conf

2.修改内容为如下

include /etc/ld.so.conf.d/*.conf

3.进入目录,创建任意*.conf文件

cd /etc/ld.so.conf.d
vim mylib.conf

4.在其中添加so的路径即可

/usr/lib

5.执行命令使其生效

sudo ldconfig

随后程序即可正常运行

使用g++创建动态库和静态库及其相关探索相关推荐

  1. 动态库和静态库的创建

    库:一组别人实现好的函数接口 1.命名方法  静态库 : libname.a  动态库 : libname.so  注意   :库的名字是name  2.链接动态库和静态库的区别  预处理,编译,汇编 ...

  2. gcc g++ Linux下动态库_静态库

    关于Unix静态库和动态库的分析 基本概念 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀. 例如:libhello.so libhello.a 为了在同一系统中使用不同版本的库,可以在 ...

  3. Linux 动态库与静态库的概念及创建使用

    动态库与静态库 库的链接方式:gcc / g++编译器默认的链接方式是动态链接 动态链接:链接动态库生成可执行程序,并没有把库中函数的实现指令直接拿过来写入可执行程序中,而是在可执行程序中记录了库中函 ...

  4. 动态库、静态库的创建及使用

    文章目录 1. 库 2. 静态库 与 动态库 区别 3. 静态库的创建和使用 静态库的创建和使用的命令 4. 动态库的创建和使用 动态库创建和使用的 命令 5. 让程序找到动态库(三种方法) 1. 库 ...

  5. bazel 链接第三方动态库_Linux 动态库与静态库制作及使用详解

    Linux 应用开发通常要考虑三个问题,即:1)在 Linux 应用程序开发过程中遇到过标准库链接在不同 Linux 版本下不兼容的问题: 2)在 Linux 静态库的制作过程中发现有别于 Windo ...

  6. 1. CMake 系列 - 从零构建动态库和静态库

    目录 1. 文件目录结构 2. 库文件源代码 3. 编译生成库文件 1. 文件目录结构 首先创建如下目录结构: └── lib├── build # ├── CMakeLists.txt└── src ...

  7. sqlserver如何定义一个静态变量_[Bazel]自定义规则实现将多个静态库合并为一个动态库或静态库...

    1 前言 2 自定义规则实现 2.1 规则功能 2.2 实现规则的理论基础 2.3 规则代码实现 3 总结 4 参考资料 1 前言 为了实现如标题所述的将多个静态库合并为一个动态库,内置的 Bazel ...

  8. Linux 动态库和静态库

    From:http://blog.csdn.net/u010977122/article/details/52958330 From:http://blog.163.com/xychenbaihu@y ...

  9. mysql.h 动态编译命令_Linux环境编译动态库和静态库总结

    对Linux环境动态库和静态库的一些基础知识做一些总结, 首先总结静态库的编译步骤. 1 先基于.cpp或者.c文件生成对应的.o文件 2将几个.o文件 使用ar -cr命令 生成libname.a文 ...

最新文章

  1. SP-45ML光电二极管放大电路及其动态特性
  2. office老是提示Microsoft office word 遇到问题需要关闭,问是否发送错误报告
  3. 【bzoj2844 albus就是要第一个出场】
  4. Bootstrap的轮播图
  5. 使用maven profile实现多环境可移植构建
  6. 并发的发展历史-线程的出现
  7. Round-Robin负载均衡算法及其实现原理
  8. 网络协议之http和tcp思维导图
  9. java tar 安装程序_linux下jdk的安装(tar包)
  10. django+layUI表格序号自动增加
  11. uva live 2326 - Moving Tables
  12. C++ Primer 读书笔记 - 第二章
  13. 只需一步!----解决R语言高清图片输出
  14. X-Cache和X-Pad
  15. java 本地文件上传到服务器,java本地文件上传到远程服务器
  16. 你努力工作会让老板感动吗?
  17. 转帖 分享代码自动生成
  18. 为什么数学不好,和语文有关系?
  19. myeclipse如何导入外部jar包
  20. Ubuntu卸载安装包

热门文章

  1. Bacteria(优先队列)
  2. MySQL自定义函数和存储过程
  3. python123格式化输出_python 字符串格式化输出 %d,%s及 format函数
  4. Ubuntu 更新错误修复大全
  5. 一文详解像素、DPI、分辨率之间的关系
  6. Git Bash中怎么复制与粘贴
  7. docker创建python容器
  8. 【亲测已解决】CentOS7 ifconfig commend not fount(命令找不到)
  9. Magento的订单相关的SQL(订单编号、创建时间、总金额、收货人、收货人地址、收货人城市、州或省(简称)、收货邮编、收货人电话、付款人邮箱)
  10. Sequoia DB数据库操作