linux系统下使用gcc/g++编译生成动态库

本文介绍了在Linux系统下如何使用gcc/g++编译生成动态链接库,详细阐述了-fPIC和-shared参数的作用,并通过一个实例演示了创建、链接及执行动态库的步骤。此外,还讲解了动态链接库的加载路径设定,包括通过动态库配置文件、LD_LIBRARY_PATH环境变量和编译选项-Wl,-rpath的方法。

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

          linux系统下使用命令行开发C/C++程序一般都会用到gcc/g++这个编译工具。大多数学过linux的同学都应该知道关于gcc/g++这个编译工具的简单应用,比方说-c,-o,-S,-E,-g等这些参数。这里我对这些相对比较基础的编译选项就不再赘述了。接下来我要说一下如何利用这个工具编译生成动态链接库。

首先我要介绍一下链接库的用处和种类,实际上链接库是实现函数库共享的一种方式,也就是说我将一个方法或者函数编译成一个链接库,这样我在其他的程序中就可以使用这个方法或者函数,只需声明即可。链接库有两种类型分别为静态和动态链接库,静态链接库以.a为扩展名,动态链接库以.so为扩展名,两种链接库的区别主要在于在编译生成目标代码的过程,静态链接库会全部整合进入目标代码,而动态链接库只是在执行目标代码的过程中动态的调用。

接下来我们从一个简单的例子来进行详细介绍。

(1)首先我在当前用户目录下创建一个sayhello.cpp文件,文件包含一个sayhello()方法,代码如下:

#include <iostream>
using namespace std;
void sayhello()
{
    cout << "Hello" << endl;

}

          然后我们将其编译成一个动态链接库,命令如下:

 g++ -fPIC -shared -o libsayhello.so sayhello.cpp

-fPIC作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,实现真正意义上的共享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值