4

我正在尝试编译 ZeroMQ C 绑定以便能够在 iPhone 上使用它,这是我的配置选项:

./configure --host=arm-apple-darwin --enable-static=yes --enable-shared=no CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.2.1 CFLAGS="-pipe -std=c99 -Wno-trigraphs -fpascal-strings -O0 -Wreturn-type -Wunused-variable -fmessage-length=0 -fvisibility=hidden -miphoneos-version-min=3.1.2 -gdwarf-2 -mthumb -I/Library/iPhone/include -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk -mdynamic-no-pic" CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar AS=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/as LIBTOOL=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool STRIP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/strip RANLIB=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ranlib

它实际上可以很好地配置和编译,但是当我将它添加到 Xcode Frameworks 部分时,我收到警告:ld: warning: in /path/to/app/libzmq.a, file was built for unsupported file format which is not the architecture being linked (armv7)并且很多符号未找到错误。

如果我将当前活动架构从 armv6 更改为 armv7,警告消息会将其更改为 armv6。我究竟做错了什么 ?

谢谢,丹

4

2 回答 2

6

听起来您正在为 iPhone 构建一个通用的 armv6/armv7 二进制文件(这是默认设置,所以这是有道理的)。这意味着您需要构建一个通用库来链接。构建这两个库,然后使用lipo将两者结合起来。

例如,构建 armv6 并将其放置在armv6/libfoo.a,将 armv7 构建在armv7/libfoo.a。然后运行

lipo -arch armv6 armv6/libfoo.a -arch armv7 armv7/libfoo.a -output libfoo.a -create

创建通用库libfoo.a

于 2010-09-01T00:09:38.530 回答
0

鉴于来自 的警告消息ld,我的猜测是您没有为正确的平台编译库。鉴于您正在使用configure,我的猜测是您正在尝试在 Xcode 之外编译库,然后稍后将其带入 Xcode 以将其链接。

也许您可以尝试运行 configure 来设置您的标头,但是在 Xcode 中执行实际的编译步骤?

这里有很多关于编译第三方(外部)C 或 C++ 库以用于 iPhone 项目的相关问题。

为 iPhone 创建静态库

TiMidity:需要帮助为 iPhone 编译这个库

于 2010-08-31T23:57:38.280 回答