有一个开源库,我想用于我的iPhone应用程序.该库是用C语言编写的,并使用Makefile编译.我想使用静态库.
如果我将.a文件添加到我的项目依赖项中,它可以很好地与模拟器一起使用,但是在定位iPhone SDK时它不会链接(当然因为.a文件是为Intel平台编译的).
我应该使用哪些GCC编译器标志来编译iPhone SDK的静态库?我认为'-arch'选项会为我提供一个iPhone架构,但没有运气.
任何帮助,将不胜感激.
我正在尝试编译用于在iPhone上使用的zeroMQ 的Objective-C绑定(https://github.com/jeremy-w/objc-zmq).
我已经添加了"objc-zmq"项目作为我想要包含它的项目的依赖项.但是,所有符号都可以找到,因为它没有链接到libzmq.a二进制文件.
如何编译libzmq.a以用于iPhone.此外,一旦我有了,我如何将我的项目链接到它?
我尝试了这篇文章中的一些建议:为iPhone编译C lib
然而,这些对我来说毫无结果.任何帮助将不胜感激.
我正在编写一个针对几种不同手机的程序,包括iPhone.该计划取决于几个第三方图书馆.我很难为iPhone和iPhone模拟器交叉编译这些第三方库.这些库包括Apache Portable Runtime和GNUTLS,以及它们的依赖项.我希望构建的库最后以前缀"/opt/iphone-3.1","/ opt/iphone-3.0","/ opt/iphone-2.2.1","/ opt /iphone-modules3.1 "和"/opt/iphone-simulator-3.0"分别.
为了使交叉编译过程易于重复,我正在创建脚本来为每个目标平台调用"configure"脚本("iphone3.1-configure","iphone3.0-configure","iphone2.2.1" -configure","iphonesim3.1-configure"和"iphonesim3.0-configure").这是我遇到麻烦的地方.
我正在使用Mac OS X 10.6 Snow Leopard计算机和官方Xcode 3.2 + iPhone SDK 3.1.
我目前有以下"iphone3.1-configure"脚本:
#! /bin/bash # # Program : iphone3.1-configure # Author : Michael Aaron Safyan # Synopsis : # This program runs the "configure" script generated by the # GNU Autotools in order to cross-compile thirdparty libraries # for the iPhone 3.1 SDK. Run this script while in a directory # containing an autotools "configure" script. Once run, …
我试图在使用MonoTouch的C#开发的iPhone应用程序中使用ZeroMQ库.我已经解决了几乎所有的问题,但是在最后一道障碍中倒下了.我正在使用ZeroMQ 2.1.10和C#CLR绑定/包装器,并在Mac OS X 10.6.8中进行开发.这是迄今为止的故事:
我首先尝试在简单的Mono C#Console应用程序中使用ZeroMq.我内置ZeroMQ用./configure,然后make和sudo make install,它安装共享库/usr/local/lib/libzmq.dylib.ZeroMq C#绑定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
Run Code Online (Sandbox Code Playgroud)
我的简单C#ZeroMq应用程序然后正常工作.
接下来,我尝试在iPhone模拟器中的iPhone应用程序中使用ZeroMq.我发现iPhone只允许静态链接库(不允许使用动态库).这是通过将所有C#包装器调用更改为来实现的
[DllImport("__Internal", CallingConvention = CallingConvention.Cdecl)]
Run Code Online (Sandbox Code Playgroud)
并libzmq.a直接包含在MonoTouch项目中,并设置额外的mtouch参数
-cxx -gcc_flags "-L${ProjectDir} -lzmq -force_load ${ProjectDir}/libzmq.a"
Run Code Online (Sandbox Code Playgroud)
确保ZeroMQ库包含在iPhone应用程序中.
当它在iPhone模拟器中运行应用程序时,它崩溃了,我追踪到来自一个zmq_init()to 的调用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
Run Code Online (Sandbox Code Playgroud)
在iPhone模拟器中取得成功!模拟器需要为iPhone模拟器SDK构建的i386静态库.我现在可以在模拟器中的iPhone应用程序中使用ZeroMQ功能.然而它在真正的iPhone上不起作用.
这是因为真正的iPhone需要一个为ARM架构而构建的库,以及真正的iPhoneOS SDK.
(构建3个独立的库 - i386,ARM6和ARM7,并将所有3个库组合成可以在任何环境中使用的'fat'库存在一个侧面问题.在我到达之前,我需要能够为ARM构建这个问题).
**最后,我的问题!!** …