场景:

main函数需要两个接口,一个求和函数,一个打印函数.

int sum(int i, int j); 求两个int数字的和.

void show(int i, char* name); 打印i的值和它的名称.

现在,需要制作:

  一个静态库libcalc.a,提供sum的接口;

  一个动态库libshow.so,提供show的接口.

#include <stdio.h>
#include "calc.h"
#include "show.h"int main(void)
{int s;int i = 1;int j = 2;s = sum(i,j);show(i,"i");show(j,"j");show(s,"sum");
}

calc.c,  calc.h

#include "calc.h"
int sum(int i, int j)
{return(i+j);
}
~        

#ifndef __CALC_H__
#define __CALC_H__
int sum(int i, int j);
#endif

show.c, show.h

#include "show.h"
void show(int i, char* name)
{printf("%s=%d\n", name, i);}
~ 

#ifndef __SHOW_H__
#define __SHOW_H__
void show(int i, char* name);
#endif
~         

Makefile:

CC = gccall: main
main: libcalc.a main.c libshow.sogcc -o main main.c -L. -lcalc  -lshow
lib: libcalc.a libshow.so
libcalc.a : calc.oar crs libcalc.a calc.o
calc.o : calc.c$(CC) -c calc.c -o calc.o
libshow.so: show.o$(CC) -shared -o libshow.so show.o
show.o: show.c$(CC) -fPIC -Wall -c show.c -o show.o
clean:rm -rf *.o *.so *.a main

输入: make all --- 生成libcalc.a,libshow.so库和main可执行程序

    make lib --- 生成libcalc.a,libshow.so库

    make clean --- 清除目标文件

输入: export LD_LIBRARY_PATH=`pwd`   --- 添加当前路径到动态库路径环境变量LD_LIBRARY_PATH

  [root@localhost libshow]# export LD_LIBRARY_PATH=`pwd`
  [root@localhost libshow]# echo $LD_LIBRARY_PATH
  /work/jz2440/test/libshow\

输入: ./main 测试结果.

  i=1
  j=2
  sum=3

=====================

关于动态库和静态库的相关知识:

1. linux编译动态库和静态库的makefile示例 http://blog.csdn.net/shaoxiaohu1/article/details/46943417

2. 三种方法使得装载器正确寻找并加载到动态库:

  a. 将libx.so移到系统库文件目录下

  b. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`

  c. 使用配置文件告诉系统动态库的路径.

    vi   /etc/ld.so.conf.d/xxxx.conf

      /work/jz2440/test/libshow

3. ldd xxxx查看依赖的动态库文件

  [root@localhost libshow]# ldd main
        linux-vdso.so.1 =>  (0x00007fff1edc0000)
        libshow.so => /work/jz2440/test/libshow/libshow.so (0x00002ad8d3511000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003a4fc00000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003a4f800000)   

转载于:https://www.cnblogs.com/mylinux/p/5866781.html

linux c: 静态库和动态库的生成和使用相关推荐

  1. 关于Linux静态库和动态库的分析

    From: http://hi.baidu.com/bdccutysj/blog/item/5bae7f0202abac7c3912bb15.html 1.什么是库 在windows平台和linux平 ...

  2. linux 中如何将文件粘贴到usr下的lib内,学会在Linux下GCC生成和使用静态库和动态库...

    一.基本概念1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主 ...

  3. Linux中gcc的编译、静态库和动态库的制作

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 Linux中gcc的编译.静态库.动态库 文章目录: 1 gcc的编译过程 1.1 gcc的编译过程 1.2 gcc的常用参数 2 gcc 静态库的制 ...

  4. Linux下的静态库、动态库和动态加载库

    from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...

  5. linux下的共享库(动态库)和静态库

    1.什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的本质不同,因此二者库的二进 ...

  6. Linux基础——gcc编译、静态库与动态库(共享库)

    Linux基础--gcc编译.静态库与动态库(共享库) https://blog.csdn.net/daidaihema/article/details/80902012 Linux基础--gcc编译 ...

  7. Linux下制作和使用静态库和动态库

    写在前面: ldd + 可执行文件 可以查看可执行文件所依赖的库 概述: Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库.linux系统有几个重要的目录存放相应的函数库,如/lib ...

  8. Linux 之三 静态库及动态库的编写和使用

      最近在整理旧电脑时,发现了一些刚入行时的学习记录,以及最早使用新浪博客 http://blog.sina.com.cn/zcshou 写的一些文章.最近要重拾 Linux,所以把这些 Word 文 ...

  9. Linux学习:静态库和动态库

    1.库是什么? 将"源代码"变为"二进制格式的源代码"(作用:加密,别人可以用,但不知道其中的内容). 2.库制作出来之后,如何给用户使用? 需要给用户:头文件 ...

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

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

最新文章

  1. sqlalchemy 网页_抓取网页数据,上班也能看股票
  2. CommonJS 的 AMD 规范
  3. python数据处理实例-Python数据分析实例操作
  4. 曾经流行的,即将流行的几种渲染模式(render pipeline)
  5. ubuntu 14 安装XML::Simple 模块
  6. RTOS ---嵌入式操作系统之时钟节拍下的任务切换
  7. Vue学习笔记(五)—— 状态管理Vuex
  8. COCOS2D-X之圆形进度条的一个简单Demo
  9. CAD/CASS城市坐标转换到CGCS2000(不涉及参数计算)
  10. html文件怎么用华为手机打开,如何调整华为手机中的文件默认打开方式
  11. SAP注塑行业ERP系统软件的分析
  12. win10多台计算机共享文件夹设置密码,win10系统给共享文件夹设置密码的操作方法...
  13. 漂泊在汉语视界中的蒙古歌者
  14. ironman钢铁侠高清mac动态壁纸
  15. 软件测试的自我修养之学习自动化测试
  16. win10打开蓝牙设备方法
  17. 机器学习之特征向量维度与样本空间
  18. 让NodeJS出错退出之后自动重启的办法
  19. 网络协议(5) 详解 TCPIP 协议(完结)
  20. Android 简单跟踪重力传感器方向旋转屏幕framework的代码

热门文章

  1. linux中查找包含指定内容的文件
  2. php errorcode,errorCode.php
  3. 什么云服务器可以挂虚拟鼠标,云服务器 模拟鼠标
  4. AtCoder Grand Contest 007 题解
  5. 数组重新定义key值,去重,排序
  6. Python大数据分析(三):大数据统计分析技术
  7. 大西瓜支付宝/QQ/微信收款码三合一源码+实测可用
  8. IOS企业应用出现无法验证,需要网络连接以在这台iPad上验证。接入互联网并重试
  9. linux 运行有道词典,ubuntu安装有道词典的教程详解
  10. C语言及程序设计基础 课程主页