gpt4 book ai didi

iphone - 将 ZeroMQ 交叉编译到 ARM 以用于 MonoTouch iPhone 应用程序配置设置

转载 作者:可可西里 更新时间:2023-11-01 04:32:01 39 4
gpt4 key购买 nike

我正在尝试在使用 MonoTouch 以 C# 开发的 iPhone 应用程序中使用 ZeroMQ 库。我已经解决了几乎所有的问题,但在最后一道坎上倒下了。我正在使用 ZeroMQ 2.1.10 和 C# CLR 绑定(bind)/包装器,并在 Mac OS X 10.6.8 中进行开发。这是到目前为止的故事:

我首先尝试在一个简单的 Mono C# 控制台应用程序中使用 ZeroMq。我用 ./configure 构建了 ZeroMQ,然后是 makesudo make install,它安装了共享库 /usr/local/lib/libzmq.dylib。 ZeroMq C# 绑定(bind) clrzmq.dll 是一个包装器,它通过 C Api [DllImport] 调用使用“核心”ZeroMq 功能。

测试应用程序没有工作,我认为这是标准的 ZeroMQ ./configure 产生 64 位输出,而 Mono 只有 32 位。然后我用

重建了 ZeroMQ
./configure CFLAGS="-O -arch i386" CXXFLAGS="-O -arch i386" LDFLAGS="-arch i386" --disable-dependency-tracking

然后我的简单 C# ZeroMq 应用可以正常工作。

接着,我尝试在 iPhone 模拟器的 iPhone 应用程序中使用 ZeroMq。我发现 iPhone 只允许静态链接库(不允许动态库)。这是通过将所有 C# 包装器调用更改为

[DllImport("__Internal", CallingConvention = CallingConvention.Cdecl)]

并在 MonoTouch 项目中直接包含 libzmq.a,并设置额外的 mtouch 参数

-cxx -gcc_flags "-L${ProjectDir} -lzmq -force_load ${ProjectDir}/libzmq.a"

确保 ZeroMQ 库包含在 iPhone 应用程序中。

当在 iPhone 模拟器中运行应用程序时,它崩溃了,我追踪到从 zmq_init()socketpair 的调用。我最终追踪到 ZeroMQ 库是针对我的构建机器的 MacOS 头文件和库构建的,而不是针对 iPhone SDK 构建的。这是由

修复的
./configure CFLAGS="-O -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk" CXXFLAGS="-O -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk" LDFLAGS="-arch i386" --disable-dependency-tracking

iPhone 模拟器成功!模拟器需要为 iPhone 模拟器 SDK 构建的 i386 静态库。我现在只能在模拟器中的 iPhone 应用程序中使用 ZeroMQ 功能。然而,它在真正的 iPhone 上不起作用。

这是因为真正的 iPhone 需要一个针对 ARM 架构构建的库,并针对真正的 iPhoneOS SDK。

(有一个附带问题,即构建 3 个独立的库 - i386、ARM6 和 ARM7,并将所有 3 个库组合成可以在任何环境中使用的“胖”库。我需要能够在之前为 ARM 构建我遇到了这个问题)。

** 最后,我的问题!! **

最后一步是将 ZeroMQ 库交叉编译到 ARM。我一整天都在尝试为此找到正确的开关,并研究了互联网上我能找到的所有示例,但似乎没有一个解决方案可行。

我离工作最近的时间是:

./configure CXX=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2
CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2
LD=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld CFLAGS="-O -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"
CXXFLAGS="-O -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"
--disable-dependency-tracking --host=arm-apple-darwin10
LDFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"
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

这会生成一个配置,make 编译 ZeroMq 代码,但会因大量链接错误而失败,例如:

ar: libzmq_la-clock.o: No such file or directory

我已经尝试了许多其他配置,但它们甚至没有正确地通过 ./configure

任何人都可以帮我提供一个合适的./configure 参数列表来生成ARM 体系结构静态库吗?这就是让 ZeroMQ 在真实 iPhone 上运行所需的全部内容。

非常感谢所有帮助!

最佳答案

只是想分享一下我最终找到了答案 - 诀窍是将 CPP="cpp"CXXCPP="cpp" 添加到 ./configure 语句,给出:

./configure CPP="cpp" CXXCPP="cpp" CXX=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-g++-4.2 CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2 LD=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld CFLAGS="-O -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk" CXXFLAGS="-O -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk" --disable-dependency-tracking --host=arm-apple-darwin10 LDFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk" 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

我使用这个配置成功地为 ARM 构建了 ZeroMQ,正如我在我的新 iPhone 应用程序中使用的一样,我首先 Buzzed(可在 http://itunes.apple.com/gb/app/i-buzzed-first!/id490622820?mt=8 获得)

关于iphone - 将 ZeroMQ 交叉编译到 ARM 以用于 MonoTouch iPhone 应用程序配置设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8318928/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com