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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)