加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux下制作一个动态库

发布时间:2022-09-30 12:31:41 所属栏目:Linux 来源:
导读:  制作一个动态库

  我们可以使用gcc工具来制作一个动态库

  示例:自己制作一个动态库,库函数的功能是传递一个字符串并输出。

  第一步:需要准备3个文件:hello.h、hello.c、test.c。其中hel
  制作一个动态库
 
  我们可以使用gcc工具来制作一个动态库
 
  示例:自己制作一个动态库,库函数的功能是传递一个字符串并输出。
 
  第一步:需要准备3个文件:hello.h、hello.c、test.c。其中hello.h和hello.c用于制作动态库,test.c是测试程序主函数
 
  第二步:使用gcc编译生成动态库
 
  gcc hello.c -fPIC -c -o hello.o
 
  gcc hello.o -shared -o libmyhello.so
 
  (或者直接一步:gcc hello.c -fPIC -shared -o libmyhello.so)
 
  gcc参数解析:
 
  ⒈-fPIC(或-fpic):表示编译为位置独立的代码。位置独立的代码即位置无关代码,在可执行程序加载的时候可以存放在内存内的任何位置。若不使用该选项则编译后的代码是位置相关的代码,在可执行程序加载时是通过代码拷贝的方式来满足不同的进程的需要linux动态库,没有实现真正意义上的位置共享。
 
  ⒉-shared:指定生成动态链接库
 
  ldd hello
 
  linux-gate.so.1 => (0xb77b0000)
 
  libmyhello.so => not found
 
  libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75f6000)
 
  /lib/ld-linux.so.2 (0xb77b1000)
 
  第三步:定位自己制作的动态库
 
  为了让系统能成功找到自己制作的动态库,需要定位到该动态库的位置。有三种方式:
 
  ⑴把自己制作的库拷贝到/usr/lib和/lib下。
 
  ⑵在LD_LIBRARY_PATH环境变量中添加自己制作的库所在的位置。/
 
  ⑶添加/etc/ld.so.conf.d/XXX.conf文件(XXX需要自己命名),把库所在的路径添加到文件末尾并执行ldconfig刷新。 //对所用用户有效
 
  第一种:将库拷贝到/usr/lib和/lib下。
 
  sudo cp libmyhello.so /usr/lib
 
  sudo cp libmyhello.so /lib
 
  此时再执行./hello即可得到正确的显示结果。
 
  第二种:修改LD_LIBRARY_PATH环境变量:
 
  sudo vim /etc/bash.bashrc 对所有用户生效 或者修改 ~/.bashrc 这样就只对当前用户生效
 
  在文件最后,添加:
 
  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux/file/dongtaiku
 
  保存退出,重启终端,此时再执行./hello即可得到正确的显示结果。。
 
  第三种:添加/etc/ld.so.conf.d/XXX.conf文件
 
  sudo vim /etc/ld.so.conf.d/my.conf
 
  在文件内添加动态库的目录
 
  /home/linux/file/dongtaiku
 
  保存退出,执行ldconfig使设置生效
 
  sudo ldconfig
 
  第四步:修改编译时的搜索库路径
 
  方法一:可以直接在gcc编译时 -L加库路径
 
  方法二:添加库路径至LIBRARY_PATH环境变量
 
  第五步:
 
  创建动态库的同时那以避免我们会使用到头文件
 
  我们应该修改头文件的路径的环境变量C_LIBRARY_PATH
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!