编译minix *** 作系统时,总有提示没有找到后缀名为.a的文件,.a文件是什么文件?怎么生成?

编译minix *** 作系统时,总有提示没有找到后缀名为.a的文件,.a文件是什么文件?怎么生成?,第1张

.a文件是.o文件的集合,可用ar -tv命令查看里面包含的.o文件。

ADS编译选项小技巧

2005-12-01 12:50

今天收到了中文之星发来的输入法文件,发现生成的库文件是.a后缀的,因为习惯使用.lib形式的后缀,又担心直接修改后缀名称会出问题,所以想研究一下怎么把.a修改成.lib文件。

命令行模式下输入armar查询参数,发现了几个比较需要的参数:

-x Extract members in <file_list>placing in files of the same name.

-t Print table of contents of archive.

-create Force creation of a new archive.

于是,输入armar -t csk2.a查看了库文件的组成文件列表,然后输入armar -x csk2.a解压出全部.o文件,最后armar -create csk2.lib *.o,成功生成csk2.lib。比较csk2.a和csk2.lib发现有一个数字不一样,估计是生成时间不一样,现在想想或许直接改后缀就可以了。虽然走了弯路,但是通过查询编译参数还发现了不少好用的功能,这里就不列举了附上参数表,自己慢慢研究。

-r Insert files in <file_list>, replace existing members of the same name.

-d Delete the members in <file_list>.

-x Extract members in <file_list>placing in files of the same name.

-m Move files in <file_list>.

-p Print files to stdout.

-a pos Insert/move files after file named <pos>.

-b pos Insert/move files before file named <pos>.

-u Update older files only, used with -r.

-n Do not add a symbol table to an object archive.

-s Force regeneration of archive symbol table.

-t Print table of contents of archive.

-zs Show the symbol table.

-zt Summarize the archive contents (sizes + entries).

-c Suppress warning when a new archive is created.

-C Do not overwrite existing files when extracting.

-T Truncate file names to system maximum length.

-v Give verbose output.

-create Force creation of a new archive.

-via file Take additional arguments from via file.

-sizes List the size of each member and the library total.

-entries List sections containing ENTRY points.

-vsn Print the current Armar Version.

-help Print this message.

Examples:-

armar -r mylib.a obj1 obj2 obj3...

armar -x mylib.a ?sort*

armar -d mylib.a hash.o

armar -tv ansilib.a

最近在开发过程中,碰到了一个的问题(静态库.a文件与别的第三方库冲突),Xcode一般提示duplicate symbol,都是说 .o与 .o冲突,在网上找了不少资料,最终通过以下方法解决了问题,觉得有必要mark一下。

这里以libDsmLock.a这个静态库为例。

本文的目标:删除libDsmLock.a文件中引起冲突的类文件,然后再打包使用,如有需要也可以合并两个库为一个静态库。

Let`s begin!

将需要处理的库文件拷贝一份出来,做进一步处理。

依次查看需要处理lib库所支持的框架类型。i386表示支持iphone模拟器,x86_64表示支持64位的模拟器,armv6应用在iphone 3gs上(现在基本已经没有了),armv7应用在iphone4,armv7s应用在iphone4s以及iphone5,arm64应用在iphone5s以后的机型。

1、查看静态库支持的哪些框架

输出是:

如果提示fat file,那么代表这个包支持多平台的,这就需要我们逐一解包再打包的 *** 作,下面先以armv7为列子。

2.创建临时文件夹,用于存放armv7框架解压后的.o文件:

3.取出armv7框架的包:

4.查看libDsmLock-armv7.a库中所包含的文件列表:

5.解压出libDsmLock-armv7.a库中文件(即.o后缀文件):

6.找到冲突的文件(MBProgressHUD.o)并删除:

7.重新打包:

打包完成以后可以用步骤4的命令来确认是否成功将文件删除

8.把其他几个框架包(i386,arm64,x86_64)逐一照着【2-7】步骤 *** 作

9.把之前打包生成的包合并生成一个包:

然后最终生成的包就可以直接投入工程使用了。

10.注意:上面演示的是只处理一个包的情况,如果需要把两个SDK合并成一个SDK使用,别的步骤都不变,就是在解压的时候,需要把每个SDK里同一框架下(比如armv7)的文件解压放到同一个文件夹,系统会自动把相同类名的文件覆盖,然后再重新打包就可以了。

菜鸟笔记,希望对您有帮助!

文章借鉴: http://blog.csdn.net/djl4104804/article/details/43099061


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12042657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存