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

本文详细介绍了如何使用g++在Linux环境下创建静态库和动态库。首先,通过编写源文件创建.o文件。接着,利用ar命令生成静态库.libmyhello.a,并通过g++链接生成可执行文件。对于动态库,使用-shared选项创建.libtest.so,然后将其移动到/usr/lib以供程序调用。当动态库位置改变时,可能需要更新动态链接器配置以确保程序正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

0.前期准备

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

  • 内容如图:hello.h

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

  • 内容如图:hello.cpp

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

  • 内容如图:main.cpp

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

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

1.静态库创建及链接

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

2.动态库创建及链接

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

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

随后程序即可正常运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值