1.创建共享库

[xpan@localhost 2.5.3]$ ls
libhello.c  libhello.h  usehello.c
[xpan@localhost 2.5.3]$ gcc -fPIC -Wall -g -c libhello.c

参数说明:

-fPIC 参数生成与位置无关的代码;

-W 或 -Wall 去除所有警告;

-g  指加上调试信息;

-c 是编译之意;

[xpan@localhost 2.5.3]$ ls libhello.o
libhello.o
[xpan@localhost 2.5.3]$ gcc -shared -o libhello.so.1.0 libhello.o
[xpan@localhost 2.5.3]$ ls
libhello.c  libhello.h  libhello.o  libhello.so.1.0  usehello.c
[xpan@localhost 2.5.3]$ ln -sf libhello.so.1.0 libhello.so
[xpan@localhost 2.5.3]$ ls
libhello.c  libhello.h  libhello.o  libhello.so  libhello.so.1.0  usehello.c
[xpan@localhost 2.5.3]$ ls libhello.so -l
lrwxrwxrwx 1 xpan xpan 15 6月  11 09:36 libhello.so -> libhello.so.1.0
[xpan@localhost 2.5.3]$

2.使用共享库

[xpan@localhost 2.5.3]$ ls
libhello.c  libhello.h  libhello.o  libhello.so  libhello.so.1.0  usehello.c
[xpan@localhost 2.5.3]$ cat libhello.h
#ifndef _libhello_H_
#define _libhello_H_
void print_hello(void);
#endif /*_libhello_H_*/
[xpan@localhost 2.5.3]$ cat usehello.c
#include "libhello.h"
/*hello*/
int main(void)
{
  print_hello();
  return 0;
}
[xpan@localhost 2.5.3]$ gcc -Wall -g -c usehello.c -o usehello.o     //编译
[xpan@localhost 2.5.3]$ ls
libhello.c  libhello.o   libhello.so.1.0  usehello.o
libhello.h  libhello.so  usehello.c
[xpan@localhost 2.5.3]$ gcc -g -o usehello_dynamic usehello.o -L ./ -lhello    //连接引用
[xpan@localhost 2.5.3]$ ls
libhello.c  libhello.o   libhello.so.1.0  usehello_dynamic
libhello.h  libhello.so  usehello.c       usehello.o
[xpan@localhost 2.5.3]$ ldd usehello_dynamic
    linux-gate.so.1 =>  (0xb7726000)
    libhello.so => not found            
    libc.so.6 => /lib/libc.so.6 (0x4c645000)
    /lib/ld-linux.so.2 (0x4c622000)
[xpan@localhost 2.5.3]$ LD_LIBRARY_PATH=$(pwd) ./usehello_dynamic
hello world ,this is library

指定库的搜索路径

1. LD_LIBRARY_PATH=$(pwd)

2. 拷贝此库"libhello.so"到/usr/lib 或 /lib 文件夹中,或者在此两个文件夹任意一个中创建一个到该库的快捷方式 ,并命名为libname.so;

3. 在"/etc/ld.so.conf"中,每一行添加一个路经,完成以上设置后再运行ldconfig命令更新信息,加入的目录下的所有库文件都可见。当静态库和动态库同名时, gcc命令将优先使用动态库。

转载于:https://www.cnblogs.com/panxihua/archive/2012/06/11/2544280.html

linux 下共享库创建及使用相关推荐

  1. Linux下共享库的查找顺序

    http://www.cnblogs.com/lovevivi/archive/2013/01/15/2861211.html 在接手一个很古老的程序时,发现其所使用的动态库都实在是太陈旧了,正式运行 ...

  2. linux下共享库的制作及常见的问题

    将自己写的链表生成共享库  1.编译  2.设置库名:    库的名称格式:lib + XXX + 版本号.so (库的名称为XXX) -shared 生成共享文件库 -fpic 动态链接    3. ...

  3. Linux下动态库的创建与更新

    Linux下动态库(libname.x.y.z)的创建与更新 由于主程序和它依赖的共享库是由不同的开发者开发的.共享库的开发者会不停地更新共享库的版本,以修正bug,增加功能或改进性能.版本多了之后, ...

  4. 在linux上实现DllMain + 共享库创建方法

    DllMain可以在dll加载到进程.线程时调用,可以做些初始化.清理的工作 但在linux上没有专门的函数,可以使用gcc扩张属性__attribute__((constructor)) and _ ...

  5. 《LINUX下动态链接库的创建与应用》

    大家都知道,在windows系统中有很多的动态链接库(以.dll为后缀的文档,dll即dynamic link library).这种动态链接库,和静态函数库不同,他里面的函数并不是执行程式本身的一部 ...

  6. linux 动态库建立,浅析linux下静态库和动态库的建立和使用

    在粤嵌学了很多知识,我们把常用的公用函数放在一起做成一个函数库,可以供其他程序共同使用,函数库本质上说,是一个可执行代码的二进制形式,可被操作系统载入内存执行.linux下的库分为两种:静态库,后缀名 ...

  7. linux下多线程的创建与等待详解 【转载】

    linux下多线程的创建与等待详解 http://blog.chinaunix.net/uid-23842323-id-2656572.html 所有线程都有一个线程号,也就是Thread ID.其类 ...

  8. Linux下动态库和静态库制作与调用

    Linux下动态库和静态库制作与调用 1.动态库和静态库简介   静态库是指在应用中,有一些公共代码需要反复使用,就把这些代码编译为"库"文件:在链接步骤中,连接器将从库文件取得所 ...

  9. nux下共享库(SO)有关的几个环境变量 zz

    Linux支持共享库已经有悠久的历史了,不再是什么新概念了.大家都知道如何编译.连接以及动态加载(dlopen/dlsym/dlclose) 共享库.但是,可能很多人,甚至包括一些高手,对共享库相关的 ...

最新文章

  1. 1052 Linked List Sorting
  2. JButton 圆角_ProE、Creo在玩具轿车设计中的一个案例应用解析|轿车|玩具|圆角
  3. 阐述Linux操作系统之rpm五种基本操作
  4. .Net Core 部署到Ubuntu 16.04 中的步骤
  5. 双列集合Map的实现类
  6. LeetCode 690. 员工的重要性(图的DFSBFS)
  7. Oracle 游标使用大全
  8. 上海芯导电子科技股份有限公司IPO过会
  9. 激活anaconda的环境出现source: no such file or directory: activate
  10. Three20 NetWork
  11. python字典用法大全
  12. CCF NOI1076 进制转换
  13. Fourier分析基础(二)——由级数导出连续Fourier变换
  14. HarmonyOS 十分钟快速入门教程|和车神哥一起学
  15. 使用plf更新Mandriva系统
  16. Calling CRDA to update world regulatory domain
  17. 乐优商城之品牌新增fastDFS(九)
  18. 联想G40-30进入PE鼠标键盘失灵解决方法
  19. jQuery表格导出Excel文件以及网页内容导出Word文档
  20. mysql中vlookup函数_excel精确匹配vlookup用法(数据库属性匹配)

热门文章

  1. qt 制作记事本_23.QT记事本
  2. edittext禁止换行符但能自动换行简书_使用n-gram创建自动完成系统
  3. springboot 拦截器 日志_跟武哥一起学习Spring Boot,一份全面详细的学习教程
  4. curl php 模拟来源_PHP CURL伪造IP和来源
  5. oracle tranc,ORACLE TRUNC()函数
  6. java comparable接口_Java面试题之Java集合篇三
  7. linux怎么退出vim编辑模式_Linux中的vim编辑器使用
  8. 【MatConvnet速成】MatConvnet图像分类从模型自定义到测试
  9. 中国电力设备行业运行状况与产量趋势研究报告2022版
  10. 全球及中国生物质能利用产业现状调研及十四五建设布局规划报告2021-2027年