问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux动态库编译

发布网友 发布时间:2022-04-24 10:07

我来回答

1个回答

热心网友 时间:2023-10-09 20:49

Linux动态库的编译与使用 转载
http://hi.baidu.com/linuxlife/blog/item/0d3e302ae2384d3a5343c1b1.html
Linux下的动态库以.so为后缀,我也是初次在Linux下使用动态库,写一点入门步骤,以便以后能方便使用。
第一步:编写Linux程序库
文件1.动态库接口文件
//动态库接口文件getmaxlen.h
#ifndef _GETMAXLEN_H_
#define _GETMAXLEN_H_
int getMaxLen(int *sel,int N);
#endif
文件2.动态库程序实现文件
//动态库程序实现文件getmaxlen.c
#include "getmaxlen.h"
int getMaxLen(int *sel,int N)
{
int n1=1,n2=1;
for(int i=1;i<N;i++)
{
if(sel[i]>sel[i-1])
{
n2 ++;
if(n2 > n1)
{
n1 = n2;
}
}
else
{
n2 = 1;
}
}
return n1;
}
第二步:编译生成动态库
gcc getmaxlen.c –fPIC –shared –o libtest.so
由以上命令生成动态库libtest.so,为了不需要动态加载动态库,在命令时需以lib开头以.so为后缀。
–fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
–shared:指明编译成动态库。
第三步:使用动态库
1. 编译时使用动态库
文件1.动态库使用文件test.c
//使用动态库libtest.so,该文件名为test.c
#include "getmaxlen.h"
int main()
{
int Sel[] = {2,3,6,5,3,2,1,2,3,4,5,6,7,6,5};
int m;
m = getMaxLen(Sel,15);
printf("%d",m);
return 0;
}
编译命令:
gcc test.c –L . –l test –o test
–L:指明动态库所在的目录
-l:指明动态库的名称,该名称是处在头lib和后缀.so中的名称,如上动态库libtest.so的l参数为-l test。
测试:
ldd test
ldd 测试可执行文件所使用的动态库
2. 动态加载方式使用动态库
文件内容:
//动态库的动态加载使用
int main()
{
void *handle = NULL;
int (*getMaxLen)(int *sel,int N);
int sel[] = {1,2,5,4,5,8,6,5,9,5,4,5,4,1};
handle = dlopen("./libtest.so",RTLD_LAZY);
if(handle == NULL)
{
printf("dll loading error.\n");
return 0;
}
getMaxLen = (int(*)(int *,int))dlsym(handle,"getMaxLen");
if(dlerror()!=NULL)
{
printf("fun load error.\n");
return 0;
}
printf("%d\n",getMaxLen(sel,15));
}
编译命令:
gcc –ldl test1.c –o test
gcc -o test test.c ./libmytools.so
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 为什么linux命令进行数学运算的时候在前面要加$ 关于Linux的一些指令的题目 关于LINUX vi文字处理器的命令 n1盒子腾讯视频卡的要死 在linux下的VIM中替换命令的格式是什么?各部分的含义是什么? 求LINUX中进程命令和vi 编辑器中一些命令参数的含义,光标移动、注释及删除等。 Linux常用的操作指令 .Linux系统下使用“top-n1”命令可以每隔1秒+显示1次+Linux状态。+A对+B错_百度问一问 巧克力过了4个月的保质期还能吃吗? 巧克力过了保质期还能吃么? 梦到巨大的暗色花纹蛇! 梦见很多蛇,被一条咬到手挣扎不动然后倒在蛇堆里,咬到我的那条还可以,倒下看到的的都很大,灰色花纹的 做梦,梦见蛇被我放在火里烧死是什么意思? ...最后把它丢在火里面烧了,最后好像又有一条小蛇。。我觉得好恐怖_百... 晚上梦见好多黑点花蛇,最后一条大的,我把它放到火里烧,都快烧焦了还不死,这是什么征兆 最近几天老公梦见蛇在他面前跑来跑去,我梦见把蛇放进火炉里了是咋回事 梦见一条很大很长的蛇跑到有火的灶里? 梦见把一条蛇扔进火里 气温高就能给大蒜浇返青水吗?返青浇水有哪些注意事项? 大蒜养护知识 Linux sed命令使用! Linux Shell问题 linux的几道题目。。。 电脑如何找回没有保存的文件 滚筒洗衣机烘干衣服的时候需要进水? 滚筒洗衣机的烘干原理是怎样的? 要用水吗? 全自动洗车机烘干要不要水 烘干洗衣机需要排水吗? 滚筒洗衣机烘干时需要打开水龙头吗? 为什么全自动洗衣机烘干时还要上水? casarte洗衣机烘干要关水吗? 洗衣机洗一次要用多少水? 滚筒洗衣机烘干时还放水是怎么回事? 全自动桶干燥是不是不用开水龙头? 海尔滚筒洗衣机烘干时需要打开水龙头吗? 洗衣机只脱水时要不要放水? 全自动洗衣机烘干时需要打开水龙头吗 洗衣服用的烘干机要不要预留水头 全自动洗衣机单烘干要开水吗? 请问洗衣机烘干时会先脱水吗?还是直接就烘干?