今天搞服务器的同事合作写一个demo,服务器那边将之前在linux下已经写好的静态库传过来,我将这些静态库添加到xcode工程中,在模拟器上运行提示 architecture i386类错误,后来看了一些资料总结问题就是交叉编译的问题。
我把遇到的情况写一个测试例子代码如下
例如server端写一个静态库:
test.h
#include <stdio.h>
void test();
test.c
#include "test.h"
void test()
{
printf("this is server test static library");
}
编译:gcc -c test.c(默认生成与系统一样架构的静态库,如果系统为i386就是i386架构,如果系统为x86_64该静态库就是x86_64架构的)
ar rcs libtest.i836.a test.o
gcc -c test.c -arch armv7(这个是指定编译成arm架构的,默认会调用arm-apple-darwin11-llvm-gcc-4.2编译器,有时候版本号有可能会不同)
ar rcs libtest.armv7.a test.o
最后合并不同架构的静态库
lipo -create libtest.i386.a libtest.armv7.a -output libtest.a
这样在xcode中引入libtest.a和test.h在真机编译和在模拟器编译都OK了