文件的指定体系结构类型(arm)与它的cputype(7)和cpusubtype(3)不匹配

时间:2010-07-19 13:35:07

标签: iphone arm openldap

我尝试将openLdap用于我正在开发的iphone应用程序。要编译openLdap,我正在使用link text中的fat_build.sh。我也在使用Simulator 3.1.3和OS X 10.6.0进行开发。但是在最后一步

$DEVROOT/usr/bin/lipo -arch arm lnsout/$LIBLDAP_NAME_static.arm -arch i386 lnsout/$LIBLDAP_NAME_static.i386 -create -output lnsout/$LIBLDAP_NAME_static
$DEVROOT/usr/bin/lipo -arch arm lnsout/$LIBLBER_NAME_static.arm -arch i386 lnsout/$LIBLBER_NAME_static.i386 -create -output lnsout/$LIBLBER_NAME_static

我收到以下错误:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo: specifed architecture type (arm) for file (lnsout/libldap.a.arm) does not match it's cputype (7) and cpusubtype (3) (should be cputype (12) and cpusubtype (0))
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo: specifed architecture type (arm) for file (lnsout/liblber.a.arm) does not match it's cputype (7) and cpusubtype (3) (should be cputype (12) and cpusubtype (0))

我尝试通过设置页眉搜索路径,库搜索路径和链接器标志来修复它而没有结果。

所以如果您有任何想法我可以解决这个问题,请告诉我!

1 个答案:

答案 0 :(得分:2)

当我为iPhone构建libssh2时出现了类似的错误,经过大量搜索后,我意识到我的.arm构建实际上是为i386(我的MacBook Pro)构建的。

我甚至为ARMv6(设备),i386(计算机)和x86_64(模拟器)编译libssh2,只是为了确保每个版本都正确构建。然后我使用lipo将arm和x86_64架构结合起来。我的笔记中有一个已加星标的评论“'make clean'和'make distclean'是你的朋友”,所以如果你先为你的机器构建了库,那么当你为iPhone构建时,它仍然有配置文件

我使用命令“lipo -info libldap.a.arm”和“file libldap.a.arm”(为文件名修改)来查看有关构建类型的更多信息。仅供参考,一旦它们正确构建,这些命令就会显示架构“arm”和“x86_64”。

我注意到的最后一件事 - 上面github链接中的代码实际上包含libldap.a和liblber.a的预编译通用二进制文件。在搞乱构建库之后,我注意到了,只是将这两个文件与ldap.h文件一起使用,我很高兴。