// 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语言动态库与静态库的更多相关文章

  1. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  2. Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf 动态库的后缀为*.so 静态库的后缀为 libxxx.a ldconfig 目录名

    Linux系统中“动态库”和“静态库”那点事儿 /etc/ld.so.conf  动态库的后缀为*.so  静态库的后缀为 libxxx.a   ldconfig   目录名 转载自:http://b ...

  3. Linux系统中“动态库”和“静态库”那点事儿【转】

    转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻. ...

  4. Linux系统中“动态库”和“静态库”那点事儿

    摘自http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在 ...

  5. gcc编译工具生成动态库和静态库之一----介绍

     1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...

  6. Android:JNI与NDK(二)交叉编译与动态库,静态库

    欢迎关注公众号,第一时间获取最新文章: 本篇目录 一.前言 本篇主要以window开发环境为背景介绍一下NDK开发中需要掌握的交叉编译等基础知识,选window系统主要是照顾大多数读者,mac ,li ...

  7. GCC 指令详解及动态库、静态库的使用

    GCC 指令详解及动态库.静态库的使用 一.GCC 1.1 GCC 介绍 GCC 是 Linux 下的编译工具集,是「GNU Compiler Collection」的缩写,包含 gcc.g++ 等编 ...

  8. 【转】iOS动态库和静态库的简要介绍

    静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人 ...

  9. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  10. libjpeg 交叉编译动态库和静态库

    1.下载libjpeg库,解压之     得到了jpeg6b和libtool-2.2.4两个文件夹. 2.编译安装libtool工具.   这是配置libtool,这里需要注意:configure 参 ...

随机推荐

  1. Java基础语法:运算符、包机制、JavaDoc

    Java基础语法:运算符.包机制.JavaDoc 自增.自减.一元运算符:++.-- 例子:b = a++; -->先给b赋值,a再自增:b=a; a=a+1; b = ++a; -->a ...

  2. 原子类Atomic

    前言 非阻塞算法:如果在某种算法中,一个线程的失败或挂起不会导致其他线程也失败或挂起,那么这种算法就被称为非阻塞算法.如果在算法的每个步骤中都存在某个线程执行下去,那么这种算法也被称为无锁(Lock_ ...

  3. 使用express设置静态目录,创建服务,响应get请求

    // 1.引入express const express = require('express');//在node应用中载入express // 2.创建应用对象 const app = expres ...

  4. vue data为什么是函数

    vue data是函数的原因: 1.防止data复用: 2.data独立性: 3.作用域: 4.js的特性. 总结来说,如果data是一个函数的话,这样每复用一次组件,就会返回一份新的data(类似于 ...

  5. h5项目自适应字体和宽高。用rem

    已知: 1.浏览器默认的字号是16px,html{font-size: 87.5%;}(16*0.875 = 14px). 2.css中的单位换算:rem 与 px 的换算为 px = rem * 设 ...

  6. JavaScript表单form

    form表单实例 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"& ...

  7. 将现有vue项目基于electron打包成桌面应用程序 如何隐藏electron窗体的菜单栏

    一.前言 项目本来打算采用B/S架构去做的,浏览器网址方式打开还是让用户不方便: 二.使用electron集成桌面应用 本身项目是使用vue-cli开发的,在使用electron之前,需要将本身的项目 ...

  8. 信息学奥赛介绍-CSP

    什么是信息学奥赛 信息学奥赛,全称为信息学奥林匹克竞赛,是教育部和中国科协委托中国计算机 学会举办的一项全国青少年计算机程序设计竞赛.主要分为NOIP(全国联赛),夏令营 NOI比赛的扩展赛,也称全国 ...

  9. Deer_GF之【AssetsHotfix】和【AssetsNative】文件夹的区别

    Hi,今天介绍一下Deer_Gf里的[AssetsHotfix]和[AssetsNative]文件夹的区别:       框架介绍请移步[Deer_GF之框架介绍] 一.[AssetsHotfix] ...

  10. Mysql数据库基础第七章:流程控制结构

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...