Linux共享库文件(so)用法

    JCConvert已经在Windows上可以工作,下一步我将在Linux平台上实现这个功能。为了保证对Linux系统so文件理解无误,先在Linux平台上创建一个so文件,并使用测试程序进行测试,其目的就是确认自己的理解是否正确。

第一步是如何生成一个so文件。

1.生成包含文件SoTest.h,代码如下:

需要注意的是:extern "C"修饰符,如果缺少此符号,则在使用dlsym时无法定位函数入口,导致dlsym返回0值。

2.实现代码如下:

代码实现很简单,无须赘述。

3.生成共享库文件(so)

g++ -g -fPIC SoTest.cpp -o libSoTest.so

4.编写静态链接测试程序

执行如下命令生成二进制文件

g++ SoTestStatic.cpp -L. -lSoTest

 

5.编写动态链接测试程序

执行如下命令,生成二进制代码:

g++ dlsym.cpp -g -ldl

动态链接与静态链接不同在于:

(1)静态链接依赖于包含文件(SoTest.h),而动态链接不需要此文件,只要知道函数的声明格式即可,本例中定义了这样的一个类型:
typedef int (*TCnToNum)(const char*,long long*);

(2)生成二进制的方法不同,静态链接方式依赖于库文件(libSoTest.so)文件,而动态链接直接加载动态库;

(3)使用的函数个数也不相同,静态链接只有一个函数即可实现对共享库的使用;而动态链接方式则需要额外的加载(dlopen)、卸载(dlclose)及函数定位(dlsym)才可以实现对函数的使用;

(4)生成二进制的命令不同,静态链接方式依赖于libSoTest.so文件,动态链接则不需要此文件;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值