千家信息网

如何在Linux系统中使用动态链接库

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,今天就跟大家聊聊有关如何在Linux系统中使用动态链接库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。动态链接库与普通的程序相比而言,没有ma
千家信息网最后更新 2025年02月04日如何在Linux系统中使用动态链接库

今天就跟大家聊聊有关如何在Linux系统中使用动态链接库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

动态链接库与普通的程序相比而言,没有main函数,是一系列函数的实现。通过shared和fPIC编译参数生产so动态链接库文件。程序在调用库函数时,只需要连接上这个库即可。例如下面实现一个简单的整数四则运输的动态链接库,定义的caculate.h和caculate.c两个文件,生产libcac.so动态链接库。

针对二进制文件有用的命令

查看文件类型

file

查看二进制文件链接到哪些库

ldd

查看二进制文件里面所包含的symbol,T表示加载,U表示undefined symbol

nm

读二进制文件里面的信息

readelf -a smu.o

将二进制文件转换为汇编

objdump -d sum.o

动态链接库的生成

sum.c

#include #include int sum(int x){ int i, result=0; for(i=0; i<=x; i++){  result+=i;  } if(x > 100)  exit(-1); return result;};void display(char* msg){ printf("%s\n",msg);} int add(float a,float b){ return a+b;}int sum_array(int array[], int num){ int i =0, sum = 0;  for(i=0; i

main.c

#include #include int main(void){ int x; printf("Input an integer:\n"); scanf("%d", &x); printf("sum=%d\n", sum(x)); return 0;};

生成可执行文件

gcc -c main.c -o main.ogcc -c sum.c -o sum.ogcc sum.o main.o

将会生成main的可执行文件

file main  // ELF 64-bit LSB executablefile sum.o // ELF 64-bit LSB relocatable

因为sum.c里面含有可复用的函数,所以想把sum.c编译成为一个动态链接库

gcc sum.o -shared -o sum.so

出现错误,提示

/usr/bin/ld: sum.o: relocation R_X86_64_PC32 against undefined symbol `exit@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

这说明不是所有的.o文件都能编译成为动态链接库,需要在.o文件生成时加参数-fPIC

gcc -c sum.c -fPIC -o sum.ogcc sum.o -o shared sum.so

一般,共享库的编译命令为(曾经的实验)

动态链接库

gcc -shared -fPIC -o libmyhello.so hello.ogcc -o hello main.c -L. -lmyhello

静态链接厍

ar rcs libxx.a xx.o g++ -o main main.cpp -static -L. -lxx

这时候再

g++ -o main main.c sum.so./main

有时会报错

error while loading shared libraries: sum.so: cannot open shared object file: No such file or directory

ldd mainoutput:sum.so => not found

这时候需要

export $LD_LIBRARY_PATH=pwd:$LD_LIBRARY_PATH

注意:-fPIC是生成.o时使用,-shared是用来生成动态链接库的

看完上述内容,你们对如何在Linux系统中使用动态链接库有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

链接 动态 文件 生成 二进制 函数 编译 内容 系统 参数 命令 程序 生产 普通 相比而言 两个 信息 四则 库文件 整数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 现代网络安全包括哪些 驮丰互联网科技有限公司 郑州服务器租用平台 购物网站需要多大的数据库 青岛加加互联网科技 衡阳市网络安全专家 社交分销商城软件开发 映客直播软件开发 无法连接服务器是什么原因手机 交换网络技术方案 北京通用软件开发价格大全 军营网络安全知识竞赛 计算机网络服务器指的是什么 购物车数据库表归谁管 网络技术霸凌 杨浦区网络技术开发销售方法 软件开发专业毕业可以干什么 数据库如何更改网络 上海网络技术产品介绍 邛崃市dns服务器 网络技术科创是什么 电脑如何选择时间服务器 pdm怎么更改数据库类型 服务器泡的冷却液叫什么 吃鸡端游哪个服务器的人最菜 阳江手机游戏软件开发项目 南阳软件开发税务筹划有哪些方案 什么是数据库的部分依赖怎样消除 江西网络安全教育公开课 潍坊电商软件开发外包公司
0