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

动态库

制作步骤

1、将.c文件生成.o文件,生成与位置无关的代码(使用命令:-fPIC) 

gcc -c add.c -o add.o -fPIC

2、使用gcc和-shared选项制作动态库

gcc -shared -o libname.so add.o sub.o

3、编译可执行程序时要指定使用的动态库(命令:-L, -l)

-l:用来指定库名

-L:用来指定库路径

gcc test.c -o a.out -lmymath -L./lib -I./inc

文件组织目录:

4、运行可执行程序./a.out 出错!!!!

第4步(动态链接器)出错原因:

链接器: 工作于链接阶段,在a.out生成前,工作时需要-l(指定库名)和-L(指定库路径)支持

动态链接器:工作于程序运行阶段,工作时需要提供动态库所在目录位置。

动态链接器去固定位置(通过环境变量)查找动态库,如果找不到就会报错,所以需要先将动态库的工作目录加入到环境变量中

解决方法:

导入环境变量:export LD_LIBRARY_PATH=./lib

注:环境变量是进程的概念,当关闭一个进程后重新打开该程序,需要重新设置环境变量修改配置文件

新打开一个终端,重新运行a.out时报错

修改配置文件的方法:

1、使用命令:vi ~/.bashrc 打开家目录下的隐藏文件

2、写入

,然后保存(此处使用的是相对路径,建议使用绝对路径)

3、source ~/.bashrc运行

ldd a.out命令

显示程序加载的动态库以及其路径

方法总结

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值