文件的操作与动态(静态)库的打包

原创 2018年04月15日 12:23:00

一、文件的操作:(open、read、write、close)

程序代码:

1)读文件

[chaiyandong@localhost linux_work]$ cat read.c

//读文件
#include<stdio.h>
#include<string.h>


//主函数
int main(){
FILE* fp = fopen("myfile","r");
if(!fp){
printf("fopen error!\n");
}
char buf[1024];
const char *msg = "hello world\n";
while(1){
//注意返回值和参数,此处有陷阱,仔细查看man守则关于该函数到说明
ssize_t s = fread(buf,1,strlen(msg),fp);
if(s>0){
buf[s] = 0;
printf("%s",buf);
}
if(feof(fp)){
break;
}
}
fclose(fp);
return 0;

}

2)写文件

[chaiyandong@localhost linux_work]$ cat write.c
//写文件
#include<stdio.h>
#include<string.h>


int main(){
//文件到打开
FILE *fp = fopen("myfile","w");
if(!fp){
printf("fopen error\n");
}
const char*msg = "hello world\n";
int count = 5;
while(count--){
fwrite(msg,strlen(msg),1,fp);
}
//文件到关闭
fclose(fp);
return 0;
}

二、动态(静态)库的打包:

1)静态库(.a):程序在编译链接的时候把库的代码连接到可执行文件中。程序运行的时候将不再需要静态库。

2)动态库(.so):程序在运行时候才去链接动态库的代码,多个程序共享使用库的代码。

3)一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目录文件的整个机器码。

4)在可执行文件开始以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接。

5)动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被用到该库的所有进程共用,节省了内存和磁盘空间。

测试代码:

(1)#include"add.h"

int add(int a,int b){
return a+b;

}


(2)#ifndef __ADD_H__
#define __ADD_H__
int add(int a,int b);
#endif   //__ADD_H__


(3)#include"sub.h"

int sub(int a,int b){

return a-b;
}


(4)#ifndef __SUB_H__

#define __SUB_H__
int sub(int a,int b);
#endif   //__SUB_H__

生成静态库:(示例)

[chaiyandong@localhost linux_work]$ ls

add.c  add.h  add.o  a.out  lib.c  main.c  makefile  myfile  myshell1.c  myshell.c  pipe.c  read.c  sub.c  sub.h  sub.o  work4r  write.c
[chaiyandong@localhost linux_work]$ ar -rc libmymath.a add.o sub.o
[chaiyandong@localhost linux_work]$ ls
add.c  add.h  add.o  a.out  lib.c  libmymath.a  main.c  makefile  myfile  myshell1.c  myshell.c  pipe.c  read.c  sub.c  sub.h  sub.o  work4r  write.c

查看静态库中的目录列表:

[chaiyandong@localhost linux_work]$ ar -tv libmymath.a
rw-rw-r-- 500/500    683 Apr 10 01:24 2018 add.o
rw-rw-r-- 500/500    687 Apr 10 01:24 2018 sub.o

生成动态库:

1)shared:表示生成共享库格式。

2)fPIC:产生位置无关码(position independent code)。

3)库名格式:lib***.so

示例:

[chaiyandong@localhost lib.c]$ ls
add.c  add.h  main  main.c  sub.c  sub.h
[chaiyandong@localhost lib.c]$ gcc -fPIC -c sub.c add.c
[chaiyandong@localhost lib.c]$ gcc -shared -o libmymath.so add.o sub.o
[chaiyandong@localhost lib.c]$ ls
add.c  add.h  add.o  libmymath.so  main  main.c  sub.c  sub.h  sub.o


Android下Java的静态库和动态库

http://www.linuxidc.com/Linux/2011-09/42368.htm
  • brucexu1978
  • brucexu1978
  • 2014-08-14 14:15:32
  • 1411

静态库资源文件、xib、图片打包处理,编译生成的静态库.a包文件太大缩小解决方法

给自己做个标记,详情请访问以下地址,亲测过,没问题的 http://www.cnblogs.com/mylizh/p/3971544.html 另外,编译生成的.a文件太大,但...
  • hxqblog
  • hxqblog
  • 2016-10-21 14:00:11
  • 638

iOS打包.a静态库步骤

打包静态库流程 1.创建静态库 2.实现类 3.公开.h文件 4.打包模拟器静态库 5.打包真机静态库 6.合并模拟器 和 真机 静态库 7.测试静态库一、前期工作 1、新建.a静态库...
  • yj229201093
  • yj229201093
  • 2016-06-08 14:29:15
  • 3532

使用Qt创建动态和静态链接库

一、创建静态链接库 静态链接库是将函数和数据编译成的一个二进制文件,Linux下的静态链接库是*.a文件,而在Windows下的静态链接库是*.LIB文件。编译器在连接的时候会恢复静态库...
  • hulifangjiayou
  • hulifangjiayou
  • 2015-05-17 20:34:28
  • 2323

静态链接和动态链接库混用导致的链接错误LIN

对于一个静态链接库L.lib,它的使用者app.exe会静态链接L.lib,意思是app.exe会将L.lib中的代码(app需要的部分,例如函数定义,类的定义等等)链接到app.exe中.  ...
  • baobei0112
  • baobei0112
  • 2016-07-01 22:36:30
  • 646

静态包,静态库打包

前言 打包静态报的时候需要设置other linker flags ==> 1.-Objc  2.-all_load(打包的项目和使用静态包的项目都要添加)( Xcode里-ObjC, -all...
  • wang1514869032
  • wang1514869032
  • 2016-08-09 16:43:18
  • 1195

MTK 展讯生成库文件 .lib .a

MTK生成lib库(ARM) http://blog.csdn.net/bruce0532/article/details/4698165 第一步,生成真机的obj文件 第二步,找到要生成l...
  • dy_Learning
  • dy_Learning
  • 2011-09-02 15:07:01
  • 2018

Xcode8如何创建 .a 静态SDK库

标签:软件开发工具包(外语首字母缩写:SDK、外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的...
  • sinat_16714231
  • sinat_16714231
  • 2016-10-17 11:39:34
  • 1897

MFC静态链接库、动态链接库的联系与区别

静态链接库(lib)与动态链接库(dll)的比较: 首先,静态链接库与动态链接库都是共享代码的方式,也可称为程序模块化的方式; 静态链接库: lib中的指令都被直接包含在最终的EXE...
  • holandstone
  • holandstone
  • 2013-04-17 16:52:49
  • 1875

android自定义静态jar包和动态jar包的编译、使用

android jar包的使用方法
  • bukker
  • bukker
  • 2016-06-14 16:05:13
  • 5024
收藏助手
不良信息举报
您举报文章:文件的操作与动态(静态)库的打包
举报原因:
原因补充:

(最多只允许输入30个字)