文档章节

C语言库的制作

首席撸起水泡
 首席撸起水泡
发布于 2016/01/08 12:39
字数 423
阅读 87
收藏 10

制作C语言库

编写头文件,在文件内声明要用到的函数,

libh.h

#include <stdio.h>
// 两数相加
int add(int a, int b);
// 绝对值
int mabs(int a);

编写c语言库源码文件, 在文件内定义之前声明的函数。

libc.c

/*两数相加函数*/
int add(int a, int b)
{
 return a+b;
}
/*一个整型数的绝对值*/
int mabs(int m)
{
 int result = m;
 if (m < 0) {
 result  = 0-m;
 }
 return result;
}

生成C语言库

静态库

  1. gcc -c libc.c -o libc.o
  2. 将libc.c 编译成二进制文件取名为libc.o

  3. ar cr libaku.a libc.o

将libc.o制作成名为libaku.a的静态库

动态库

  1. gcc -c libc.c -o libc.o
  2. 将libc.c 编译成二进制文件取名为libc.o

  3. gcc -shared -fPIC -o libsku.so libc.o

将libc.o制作成名为libsku.so的动态库

调用C语言库

编写测试程序

main.c

#include "libh.h"
int main(int argc, char const* argv[])
{
 int n = 0;
 scanf("%d", &n);
 printf("|%d| = %d\n%d + 3 = %d\n", n, mabs(n), n, add(n, 3));
 return 0;
}

编译测试程序

测试静态库

  1. gcc main.c -L . -laku -o maina
  2. -L指定库路径,-l指定库名, 库名为lib后半部分,编译测试程序取名为main**

  3. ./maina

运行main

测试动态库

  1. gcc main.c -L . -lsku -o mains
  2. -L指定库路径,-l指定库名, 库名为lib后半部分,编译测试程序取名为main**

  3. ./mains

运行main

动态库, 静态库, 之间的差别

对于静态库而言, 当程序编译时会把静态库载入到程序当中去, 生成的运行包会比较大。
而且完成后静态库删除对程序不会有影响

但是动态库却是相反的, 它不会载入程序, 库必须保留,

© 著作权归作者所有

共有 人打赏支持
上一篇: wget基本用法
下一篇: 社会
首席撸起水泡
粉丝 5
博文 58
码字总数 11229
作品 0
深圳
程序员
私信 提问
Swift调用C语言自建函数库的方法

本程序示范了如何用Swift调用自定义C语言模块的方法。您可以直接在github下载本程序,或者按照以下教程逐步完成。 简介 示范程序中有一个C语言的源程序CSwift.C和一个头文件CSwift.h,我们的...

rockford
2017/01/18
0
0
IOS 入门开发之使用Xcode4制作静态库详解(五)

IOS 入门开发之使用XCODE4制作静态库详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/7283763 注意:首先确保你的X...

彭博
2012/03/09
1K
0
IOS XCODE制作静态库详解

注意:首先确保你的XCODE4使用IOS5,否则请下载IOS5在继续阅读。 IOS程序是由Objective-c语言构成,而是Objective-c语言中每一个类又分成 .h .m 文件。静态库可以将这些程序的类封装成一个....

mahb520
2013/04/07
0
0
Linux系统中“动态库”和“静态库”那点事儿-【经典好文】

原文链接:http://blog.csdn.net/u010977122/article/details/52958330 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻。在这之前,我们需要了解一下源代码到可执行...

1清风揽月1
2017/06/14
0
0
新手必看,学习Linux重要八招

嵌入式Linux系统开发学习步骤,深圳嵌入式Linux培训高薪一路相伴  最近在嵌入式论坛上经常遇到一些嵌入式linux初学者在询问:嵌入式Linux如何入门?嵌入式Linux开发都需要学习什么?等等。其...

educn114
2014/05/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

移植Modbus到STM32F103(2):移植FreeModbus到usart3并运行示例代码

FreeModbus是Modbus的一个被广泛移植的实现。其源码在github,最新版是1.6。 FreeModbus支持Modbus功能码里的0x01~0x06,0x0F~0x11和0x17,对一些功能比如异常诊断和读事件计数等功能码并没有...

Konstantine
今天
3
0
浅谈神经网络(神经网络篇)

背景 之前写过浅谈神经网络基础篇,简单介绍下机器学习这块内容,用于扫盲。本文正式将神经网络,这部分是深度学习的基础。了解完可以掌握强大的机器学习的方法,也可以更好的了解深度学习。...

Uknowzheng
今天
3
0
移动硬盘变为RAW格式后的修复

在Mac上使用自己的移动硬盘结果文件系统格式变为RAW; 在自己windows笔记本上使用chkdsk H: /F进行修复,修复日志如下: C:\Users\mengzhang6>chkdsk H: /F文件系统的类型是 NTFS。卷标是 do...

晨猫
今天
3
0
10 Git —— 标签管理

10 Git —— 标签管理 本节内容: 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;命令git......

lwenhao
今天
3
0
小程序设置垂直居中,水平居中

如果子容器中的view需要居中的话,那需要在父容器中设置居中 水平居中: display: flex; flex-direction: column; align-items: center; 垂直居中 display: flex;align-items: cen...

淘幻幻
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部