静态库打包

静态库(把目标文件:二进制文件,.o,.a)打包:使用静态库有两个条件:

  1. 把库文件包含进来
  2. 包含头文件

注意:库文件中不能有main函数

Linux中,静态链接库以.a结尾,动态链接库以.so结尾。

windows中,静态链接库以.lib结尾,动态链接库以.dll结尾。

静态库打包主要是把多个.o文件生成链接文件,有以下优点

  1. 代码保护(看不到原来代码)
  2. 维护成本低
  3. 可在静态库设置保护期(eg:获取当前时间和2019年比较,若大于则退出)

Makefile的书写:

  1 .PHONY:libmysem.a
  2 libmysem.a:comm.o
  3     ar rcs [email protected] $^
  4 comm.o:comm.c
  5     gcc -c $<
  6 .PHONY:clean
  7 clean:
  8     rm -f libmyset.a comm.o

$<表示把依赖也表文件一个个拿出来给gcc -c命令。

下来就可以使用该静态库了,新建一个目录,拷贝libmyset.a和comm.h文件到此目录下,这是使用静态库的两个条件。但现在还是找不到库文件,引文我们平常使用时连接的时候系统文件在环境变量PATH中定义路径,所以可以找到。接下来,修改Makefile文件添加-I/lib(可找到头文件)  -L/lib(搜索路径) -lmyset(一个路径下哪个库)。

时间: 2024-08-01 14:39:43

静态库打包的相关文章

.a静态库打包

Introduction about Linkedme packaging .a file 打包 打包流程 1.静态库工程的创建 Xcode New一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static Library.直接next去建立一个LinkedME_SDK这样的工程. 2.自动生成.h和.m文件 接下来你会看到自动生成.h和.m文件 可以在.m文件中写你要的代码(此静态库现在没有引用这两个文件生成.a前将之删除或者此时

【项目】静态库打包的一些注意事项

今天打包的时候,出现了一些问题: localhost:~ LV$ lipo -info /Users/LV/Library/Developer/Xcode/DerivedData/FaceAPI-eryqzwkpzlhqgsczyrzogeimufsd/Build/Products/Debug-iphoneos/libFaceAPI.a input file /Users/LV/Library/Developer/Xcode/DerivedData/FaceAPI-eryqzwkpzlhqgsc

标准IO的简单应用,动静态库,读取系统时间并打印,模拟ls -l功能

2015.2.27星期五,小雨 标准IO实现的复制功能: #include <stdio.h>#include <errno.h> #define N 64 int main(int argc, char *argv[]){ int n; char buf[N]; FILE *fps, *fpd; if(argc < 3) { printf("usage : %s <src_file><dst_file>\n",argv[0]);

iOS 静态类库 打包 C,C++文件及和OC混编

iOS 静态类库 编译 C,C++ 我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码: 同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 .m 文件,手动修改为 .mm 文件以支持 oc c++的混编 基于上面的特性,我们在打包静态类时,可以编译C,OC,C++ 以及三者混合的代码: 因为大多数夸平台的算法库代码都是C或是C++写的,我们利用Xcode编译成静态类库,可以非常安全的提供给别人使用 如下示例: 一:静态库打包 C 代码

【转】iOS静态库 【.a 和framework】【超详细】

原文网址:https://my.oschina.net/kaqijiang/blog/649632 一.什么是库? 库是共享程序代码的方式. 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种.iOS中的静态库有 .a 和 .framework两种形式:动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式. 二.静态库与动态库的区别? 静态库: 链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝.

静态库和动态库详解

1.什么是库,为什么使用库? 库是共享程序代码的方式,一般分为静态库和动态库:库实现了iOS程序的模块化,将某些特定的功能模块化为库的格式方便分享和使用! 2.静态库和动态库有什么特点? 异同点: 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存. 共同点: 静态库和动态库都是闭源库,只能拿来满足某个功能的使用,不会暴露内部具体的代码信息,而从github上下载的第三

(一〇二)静态库(.a)的打包

库是代码的集合,根据代码公开程度,分为开源库和闭源库. 其中闭源库主要包括静态库和动态库,是经过编译的二进制文件,看不到具体实现. 静态库的拓展名是.a或者.framework,动态库则是.dylib和.framework. 静态库在链接时会将库完整的复制到可执行文件中,被多次使用就有冗余拷贝. 动态库在链接时不复制,程序运行时系统会动态的加载,多个程序共享一个动态库,节省内存. 注意:项目中如果包含自制的动态库,上传到App Store会被拒绝,如果要上传App,应选择静态库. 静态库用于抽取

静态库的打包参考步骤

闲言少叙,立马入正题... 1.创建静态库工程 注意:应选择Framework & Library中的Cocoa Touch Static Library.创建一个空项目. 2.创建需要打包的库文件 3.在.h文件中可以声明需要提供给外界调用的方法 4.在.m文件中实现对应的功能. 5.注意需要在工程中设置Copy Files 中添加.h文件,否则最后生成的库文件中没有.h文件.具体步骤为项目名称StaticDemo->Targets->StaticDemo->BuildPhas

打包静态库.a文件的方法(ar,ranlib,nm命令介绍)

一 常用脚本 1 打包脚本 脚本如下,下面附上ar 和 ranlib命令参考(命令来自于网络) ALLLIB=*.aFILE=`ls *.a`#原来的库解压重命名 for F in $FILEdo        ar x $F        OBJ=`ar t $F`        for O in $OBJ        do                mv $O ${F}_${O}        donedone #ar c 创建一个库,ar r 插入文件.ar s ==ranlib 向