linux c: 静态库和动态库的生成和使用
场景:
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: 静态库和动态库的生成和使用相关推荐
- 关于Linux静态库和动态库的分析
From: http://hi.baidu.com/bdccutysj/blog/item/5bae7f0202abac7c3912bb15.html 1.什么是库 在windows平台和linux平 ...
- linux 中如何将文件粘贴到usr下的lib内,学会在Linux下GCC生成和使用静态库和动态库...
一.基本概念1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主 ...
- Linux中gcc的编译、静态库和动态库的制作
欢迎大家关注笔者,你的关注是我持续更博的最大动力 Linux中gcc的编译.静态库.动态库 文章目录: 1 gcc的编译过程 1.1 gcc的编译过程 1.2 gcc的常用参数 2 gcc 静态库的制 ...
- Linux下的静态库、动态库和动态加载库
from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...
- linux下的共享库(动态库)和静态库
1.什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的本质不同,因此二者库的二进 ...
- Linux基础——gcc编译、静态库与动态库(共享库)
Linux基础--gcc编译.静态库与动态库(共享库) https://blog.csdn.net/daidaihema/article/details/80902012 Linux基础--gcc编译 ...
- Linux下制作和使用静态库和动态库
写在前面: ldd + 可执行文件 可以查看可执行文件所依赖的库 概述: Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库.linux系统有几个重要的目录存放相应的函数库,如/lib ...
- Linux 之三 静态库及动态库的编写和使用
最近在整理旧电脑时,发现了一些刚入行时的学习记录,以及最早使用新浪博客 http://blog.sina.com.cn/zcshou 写的一些文章.最近要重拾 Linux,所以把这些 Word 文 ...
- Linux学习:静态库和动态库
1.库是什么? 将"源代码"变为"二进制格式的源代码"(作用:加密,别人可以用,但不知道其中的内容). 2.库制作出来之后,如何给用户使用? 需要给用户:头文件 ...
- linux 动态库建立,浅析linux下静态库和动态库的建立和使用
在粤嵌学了很多知识,我们把常用的公用函数放在一起做成一个函数库,可以供其他程序共同使用,函数库本质上说,是一个可执行代码的二进制形式,可被操作系统载入内存执行.linux下的库分为两种:静态库,后缀名 ...
最新文章
- sqlalchemy 网页_抓取网页数据,上班也能看股票
- CommonJS 的 AMD 规范
- python数据处理实例-Python数据分析实例操作
- 曾经流行的,即将流行的几种渲染模式(render pipeline)
- ubuntu 14 安装XML::Simple 模块
- RTOS ---嵌入式操作系统之时钟节拍下的任务切换
- Vue学习笔记(五)—— 状态管理Vuex
- COCOS2D-X之圆形进度条的一个简单Demo
- CAD/CASS城市坐标转换到CGCS2000(不涉及参数计算)
- html文件怎么用华为手机打开,如何调整华为手机中的文件默认打开方式
- SAP注塑行业ERP系统软件的分析
- win10多台计算机共享文件夹设置密码,win10系统给共享文件夹设置密码的操作方法...
- 漂泊在汉语视界中的蒙古歌者
- ironman钢铁侠高清mac动态壁纸
- 软件测试的自我修养之学习自动化测试
- win10打开蓝牙设备方法
- 机器学习之特征向量维度与样本空间
- 让NodeJS出错退出之后自动重启的办法
- 网络协议(5) 详解 TCPIP 协议(完结)
- Android 简单跟踪重力传感器方向旋转屏幕framework的代码