首页 > 其他分享 >mymath.so共享库

mymath.so共享库

时间:2022-12-04 13:46:35浏览次数:60  
标签:gcc lib mymath 代码段 so shared 共享

 

共享库的使用(.so)文件

 

 

 

1、共享库的概念

 

 

2、创建共享库命令


# 1、将.c生成.o文件,(生成与位置无关的代码-fPIC)
gcc -c add.c -o add.o -fPIC

# 2、使用 gcc -shared 制作动态库
gcc -shared lib库名.so add.o sub.o div.o

# 3、编译可执行程序时,指定所使用的动态库。-l: 指定库名 -L: 指定库路径
gcc test.c -o a.out -l mymath -L ./lib

4.运行可以执行程序 ./a.out 出错!!!
原因 连接器 工作于链接阶段,工作时需要 -l 和 -L
动态连接器 工作于程序运行阶段,工作时需要提供动态库所在目录位置

5、解决:把动态库配置到环境变量中 (建议使用绝对路径)
export LD_LIBRARY_PATH=./lib

报错了:在加载动态库的时候出错了,库名叫 libmymath.so,不能打开共享文件,没有这个文件或者目录

 

2、把动态库配置到环境变量中 

1 gcc -shared -fpci -o lib/libmath.so obj/mymath.o

具体加不加 fpci 这个要看平台支持吧支持;具体详情可以查阅 shared的相关参数文档

这里有一个-fPIC参数
PIC就是position independent code
PIC使.so文件的代码段变为真正意义上的共享
如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置.

 

 

 

3、使用共享库命令

1 2 3 4 5 daokr@ubuntu:/mnt/hgfs/mystudy/clession$ gcc -shared -o lib/libmymath.so obj/mymath.o daokr@ubuntu:/mnt/hgfs/mystudy/clession$ gcc -o bin/mymath_test2008 obj/mymath_test.o -Llib -lmymath daokr@ubuntu:/mnt/hgfs/mystudy/clession$ ./bin/mymath_test2008 ./bin/mymath_test2008: error while loading shared libraries: libmymath.so: cannot open shared object file: No such file or directory daokr@ubuntu:/mnt/hgfs/mystudy/clession$<br>daokr@ubuntu:/mnt/hgfs/mystudy/clession$ sudo cp lib/libmymath.so /usr/lib<br>daokr@ubuntu:/mnt/hgfs/mystudy/clession$ ./bin/mymath_test2008<br>

注意:  

这样中直接回报错;说是不能够去打开这个共享库文件;两种方式解决这个错误

1)cp libmymath.so /usr/lib (需要root用户)

2)export LD_LIBRARY_PATH=库文件的目录 (这个是临时的;在开个窗口就没啥用了;执行的

1 ./bin/mymath_test2008 不会被执行

 

 

 

标签:gcc,lib,mymath,代码段,so,shared,共享
From: https://www.cnblogs.com/TonySSS/p/16949732.html

相关文章

  • 使用socketserver实现文件下载
    服务端server.pyimportosimportjsonimportstructimportsocketserverclassMyServer(socketserver.BaseRequestHandler):#重写handle消息的方法def......
  • mysql json操作
     MySQL根据JSON字段的内容检索查询数据使用字段->'$.json属性'进行查询条件使用json_extract函数查询,json_extract(字段,"$.json属性")根据json数组查询,用JSON_CON......
  • 安装tensorflow
    1打开anaconda这里的3name我填写的是tf2.先打开prompt查看已经有的环境condaenvlist3.进入创建的tf进入tf环境后进行安装使用命令pipinstalltensorflow4.......
  • 前端和后台建立websocket长连接,并添加心跳检测
    Nginx代理服务器默认1分钟会导致websocket长连接端口,所以服务端与客户端需要添加心跳检测1.前端代码Vuedata(){return{showDeviceDialog:true,......
  • 如何将java对象转换成json数据
    packagecn.hopetesting.com.test;importcn.hopetesting.com.domain.User;importcom.fasterxml.jackson.core.JsonProcessingException;importcom.fasterxml.jackson.da......
  • Winform程序打包工具NSIS(Nullsoft Scriptable Install System)
    NSIS(NullsoftScriptableInstallSystem)是一个开源的Windows系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样,NSIS......
  • 【CV算法理解与源码实现】DeepSORT
    前言 论文:​​SimpleOnlineandRealtimeTrackingwithaDeepAssociationMetric​​ 参考1.​​deepsort_github​​;2.​​deepsort_paper​​;3. ​​ComputerVi......
  • 三阶段:第14周 分布式锁 案例实现 用redisson分布式锁
                              自动释放锁               ......
  • pwn | jarvisoj_tell_me_something
    pwn|jarvisoj_tell_me_somethingx64栈溢出ret2text存在后门直接溢出跳过去就行了。唯一有点区别的就是这里面没有pushebp和popebp,所以只需要覆盖0x88就行了exp......
  • Ubuntu通过NFS实现文件共享
    搭建基础NFS服务服务端(192.168.1.1)#安装NFSServer服务sudoapt-getinstallnfs-kernel-server-y#创建共享目录并设置权限cd/datamkdir-psharechmod777share......