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 参 ...
随机推荐
- TCP/IP协议(3): Wi-Fi(IEEE 802.11) 协议 —— 构成无线局域网的基本协议
TCP/IP协议(3): Wi-Fi(IEEE 802.11) 协议 -- 构成无线局域网的基本协议 关于 Wi-Fi(IEEE 802.11) 协议 关于 IEEE 802.11 IEEE 802. ...
- JZOJ 1495. 宝石
题目大意 用边长为 \(k\) 的正方形在平面内覆盖,求它能覆盖的最大点权和 思路 \(60\) 分:其实很容易想到按它们的横坐标先后排序,然后单调队列维护.复杂度 \(O(n k \log k)\) ...
- CSP2022 S游记
9.26:开坑. 没报 J 组主要是因为 J 比较垃圾,去抢小朋友的一等没什么意思. 初赛 刚拿到试卷就直接懵了,这 tm 是给人做的题?宇宙射线是什么奇妙东西,还有基数排序我根本不会啊,这个阅读程序 ...
- 如何在电脑上配置Vue开发环境
一,开发环境 : Node JS(npm) Visual Studio Code(前端IDE) 安装NodeJS 下载地址: nodejs中文网 Visual Studio Code 官网下载地址 h ...
- CF846F - Random Query
题意:对于一个序列,每次随机选择两个数 \(l,r\),如果 \(l\gt r\) 就交换,求 \(l,r\) 中本质不同的数个数的期望. 我们发现,在所有的 \(n^2\) 个选择方案中,其实就是 ...
- postgresql VACUUM 不会从表中删除死行的三个原因
一.为什么是VACUUM? 每当更新或删除PostgreSQL表中的行时,都会留下死元组.VACUUM摆脱了它们,以便空间可以重复使用.如果一个表没有被清理,它就会变得臃肿,这会浪费磁盘空间并减慢表的 ...
- AI 能多强「GitHub 热点速览」
不知道 AI 在你那边是什么样的具象,在我这就是各种搞图:从给线稿图上色,到直接给你生成一张小色图,AI 最近是真出风头,本周热点速览也收录了 2 个 AI 项目,也和图像有关.还有一个和 AI 相关 ...
- MySQL 中的锁有哪些类型,MySQL 中加锁的原则
MySQL 中的锁理解 锁的类型 全局锁 缺点 适用范围 表级锁 表锁 元数据锁 意向锁 自增锁 行锁 Record Lock Gap Lock Next-Key Lock 插入意向锁 加锁的原则 1 ...
- pat 乙级 1025 反转链表
目前无法ac过最后一个测试点,其余ac,原因是有无效节点存在,但这个代码加上去除无效节点函数时便会运行超时 还没想出来怎么做,先这样吧 #include <stdio.h> #includ ...
- mybatis中的土鸡杂鱼
mybatis中的土鸡杂鱼 目录 mybatis中的土鸡杂鱼 1.mapper接口为什么要和mapper.xml在同一个路径下? 2.主键生成为什么配置一个字段就可以? 原理 3.为什么默认使用的是预 ...