c语言动态库与静态库
// show.h
#ifndef __SHOW_H_
#define __SHOW_H_
#include <stdio.h>
#include "math.h"
void show(int, char, int, pfunc);
#endif
// math.h
#ifndef __MATH_H_
#define __MATH_H_
typedef int (*pfunc)(int, int);
int add(int, int);
int sub(int, int);
#endif
// show.c
#include "show.h"
void show(int a, char con, int b, pfunc func) {
printf("%d %c %d = %d\n", a, con, b, func(a, b));
}
// math.c
#include "math.h"
int add(int a, int b) {
return a + b;
};
int sub(int a, int b) {
return a - b;
};
静态库
// main.c
//调用静态库
#include "math.h"
#include "show.h"
int main(void) {
int a = 10, b = 20;
show(a, '+', b, add);
show(a, '-', b, sub);
// 打包静态库 ar -r libmath.a math.o show.o
// ar -r 动态库名称 动态库依赖的.o文件1 动态库依赖的.o文件2 ...
// 如果依赖的文件就在当前目录 gcc -o test main.c libmath.a
// 如果依赖的文件不在当前目录:例:在上一级目录 gcc -o test -lmath -L.. main.c
/*
* -l math 库名 (库名称必须lib开头才可以使用-l参数)
* -L .. 依赖库所在的目录,绝对路径相对路径都可以
* 如果依赖库不是lib开头的,那么需要直接指定依赖库的路径 例如:gcc -o lll main.c ../math.a
* 库路径也可以写到环境变量里,这样编译的时候gcc会从环境变量中设置的路径找依赖库,多个路径用冒号分割,例:LIBRARY_PATH=/lib:/usr/lib:usr/lib64:/usr/local/lib
* */
return 0;
}
动态库
// main.c
//调用动态库
#include "math.h"
#include "show.h"
int main(void) {
int a = 10, b = 20;
show(a, '+', b, add);
show(a, '-', b, sub);
// 动态库生成.o文件 gcc -c -fpic show.c
// 打包动态库 gcc -shared -o libmath.so show.o math.o
// gcc -shared -o 动态库名称 动态库依赖的.o文件1 动态库依赖的.o文件2 ...
// 如果依赖的文件就在当前目录 gcc -o test main.c libmath.so
// 如果依赖的文件不在当前目录:例:在上一级目录 gcc -o test -lmath -L.. main.c
/*
* -l math 库名 (库名称必须lib开头才可以使用-l参数)
* -L .. 依赖库所在的目录,绝对路径相对路径都可以
* 如果依赖库不是lib开头的,那么需要直接指定依赖库的路径 例如:gcc -o lll main.c ../math.so
* 库路径也可以写到环境变量里,这样编译的时候gcc会从环境变量中设置的路径找依赖库,多个路径用冒号分割,例:LIBRARY_PATH=/lib:/usr/lib:usr/lib64:/usr/local/lib
* 与静态库不同的是动态库需要再程序运行时指定动态库路径,如果在当前目录下则不需要指定,多个路径用冒号分割,例:LD_LIBRART=/lib:/usr/lib:usr/lib64:/usr/local/lib
* */
return 0;
}
c语言动态库与静态库的更多相关文章
- ios 开发中 动态库 与静态库的区别
使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...
- Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名
Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名 转载自:http://b ...
- Linux系统中“动态库”和“静态库”那点事儿【转】
转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...
- Linux系统中“动态库”和“静态库”那点事儿
摘自http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在 ...
- gcc编译工具生成动态库和静态库之一----介绍
1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...
- Android:JNI与NDK(二)交叉编译与动态库,静态库
欢迎关注公众号,第一时间获取最新文章: 本篇目录 一.前言 本篇主要以window开发环境为背景介绍一下NDK开发中需要掌握的交叉编译等基础知识,选window系统主要是照顾大多数读者,mac ,li ...
- GCC 指令详解及动态库、静态库的使用
GCC 指令详解及动态库.静态库的使用 一.GCC 1.1 GCC 介绍 GCC 是 Linux 下的编译工具集,是「GNU Compiler Collection」的缩写,包含 gcc.g++ 等编 ...
- 【转】iOS动态库和静态库的简要介绍
静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...
- Linux中的动态库和静态库(.a/.la/.so/.o)
Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...
- libjpeg 交叉编译动态库和静态库
1.下载libjpeg库,解压之 得到了jpeg6b和libtool-2.2.4两个文件夹. 2.编译安装libtool工具. 这是配置libtool,这里需要注意:configure 参 ...
随机推荐
- KMP 算法(Knuth–Morris–Pratt algorithm)的基本思想
KMP 算法(Knuth–Morris–Pratt algorithm)的基本思想 阅读本文之前,您最好能够了解 KMP 算法解决的是什么问题,最好能用暴力方式(Brute Force)解决一下该问题 ...
- Linux:grep 查找文件内容
在 Windows 中打开文件用查找功能可以查找我们想要的字符,前提是要打开文件.Linux 有一个指令不用打开文件就可以查询字符,而且支持正则表达式-- grep 指令.不仅如此,grep 还支持在 ...
- 微信小程序与微信公众号之间支付问题解决方案
前言 大家好,我是一名对编程有兴趣的小伙子,IT届称我为xiager,工作中叫我jake 就好了,如果此文对你有帮助希望多多关注哦. 准备 微信公众平台 微信支付平台 微信开放平台 一. 小程序 ...
- RestTemplate 请求
@Autowired private RestTemplate httpRestTemplate; String code= request.getParameter("code" ...
- linux移植问题记录
问题一 ~/linux/linux-5.2.8$ make s3c2410_defconfig HOSTCC scripts/basic/fixdep/bin/sh: 1: scripts/bas ...
- Deer_GF之【AssetsHotfix】和【AssetsNative】文件夹的区别
Hi,今天介绍一下Deer_Gf里的[AssetsHotfix]和[AssetsNative]文件夹的区别: 框架介绍请移步[Deer_GF之框架介绍] 一.[AssetsHotfix] ...
- Flink 状态后端及RocksDBStateBackend的优势
MemoryStateBackend(只用于本地开发和调试,不用于生产)和FsStateBackend(如果Flink作业的状态很小或需要很低的延迟,则应该考虑FsStateBackend),这两种都 ...
- 51nod 1594 Gcd and Phi
Link 题解: $ans = \sum_{i = 1}^{n}\sum_{j = 1}^{n}phi(gcd(phi(i), phi(j)))$ $=\sum_{d = 1}^{n}phi(d)\s ...
- 2022-05-06内部群每日三题-清辉PMP
1.一个项目正处于执行阶段,一些可交付成果已经准备好交给客户.团队成员希望快速交付这些可交付成果,以节省时间并获得资金.若要实现这个目标,就必须消除质量控制相关的任务. 项目经理应该怎么做? A.让团 ...
- Oracle 详细-创建用户并导入sql文件
0.基本信息查询SQL select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system select * from all_u ...