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 参 ...
随机推荐
- Java基础语法:运算符、包机制、JavaDoc
Java基础语法:运算符.包机制.JavaDoc 自增.自减.一元运算符:++.-- 例子:b = a++; -->先给b赋值,a再自增:b=a; a=a+1; b = ++a; -->a ...
- 原子类Atomic
前言 非阻塞算法:如果在某种算法中,一个线程的失败或挂起不会导致其他线程也失败或挂起,那么这种算法就被称为非阻塞算法.如果在算法的每个步骤中都存在某个线程执行下去,那么这种算法也被称为无锁(Lock_ ...
- 使用express设置静态目录,创建服务,响应get请求
// 1.引入express const express = require('express');//在node应用中载入express // 2.创建应用对象 const app = expres ...
- vue data为什么是函数
vue data是函数的原因: 1.防止data复用: 2.data独立性: 3.作用域: 4.js的特性. 总结来说,如果data是一个函数的话,这样每复用一次组件,就会返回一份新的data(类似于 ...
- h5项目自适应字体和宽高。用rem
已知: 1.浏览器默认的字号是16px,html{font-size: 87.5%;}(16*0.875 = 14px). 2.css中的单位换算:rem 与 px 的换算为 px = rem * 设 ...
- JavaScript表单form
form表单实例 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"& ...
- 将现有vue项目基于electron打包成桌面应用程序 如何隐藏electron窗体的菜单栏
一.前言 项目本来打算采用B/S架构去做的,浏览器网址方式打开还是让用户不方便: 二.使用electron集成桌面应用 本身项目是使用vue-cli开发的,在使用electron之前,需要将本身的项目 ...
- 信息学奥赛介绍-CSP
什么是信息学奥赛 信息学奥赛,全称为信息学奥林匹克竞赛,是教育部和中国科协委托中国计算机 学会举办的一项全国青少年计算机程序设计竞赛.主要分为NOIP(全国联赛),夏令营 NOI比赛的扩展赛,也称全国 ...
- Deer_GF之【AssetsHotfix】和【AssetsNative】文件夹的区别
Hi,今天介绍一下Deer_Gf里的[AssetsHotfix]和[AssetsNative]文件夹的区别: 框架介绍请移步[Deer_GF之框架介绍] 一.[AssetsHotfix] ...
- Mysql数据库基础第七章:流程控制结构
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...