我有一个适用于iOS4和iOS5的应用程序。 它使用针对ARM的zeromq库的静态编译版本。 苹果否认我的申请,因为他们声称在iOS 6下崩溃(还没有发布..wth?) 使用iOS 6 GM进行尝试后,我可以确认它在初始化ZeroMQ套接字时会崩溃。 这是崩溃消息: dyld: lazy symbol binding failed: Symbol not found: ___sync_fetch_and_add_4 Referenced from: /var/mobile/Applications/00EDEEDA-0068-4061-9188-01D627F9A6D6/OpenAir.app/OpenAir Expected in: /usr/lib/libSystem.B.dylib dyld: Symbol not found: ___sync_fetch_and_add_4 Referenced from: /var/mobile/Applications/00EDEEDA-0068-4061-9188-01D627F9A6D6/OpenAir.app/OpenAir Expected in: /usr/lib/libSystem.B.dylib 我明白__sync_fetch_add_4符号是一个编译器primefaces内置。 我知道ZeroMQ使用互斥体进行内部locking。 我一直在到处search,试图找出iOS6中可能导致这些符号不存在的变化。 使用Xcode 4.5和iOS6 GM,库甚至不会编译相同types的消息: Undefined symbols for architecture armv7: "___sync_fetch_and_add_4", referenced from: zmq::socket_base_t::unregister_session(std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > […]
我正在尝试在使用MonoTouch的C#开发的iPhone应用程序中使用ZeroMQ库。 我已经解决了几乎所有的问题,但最后的障碍已经落空了。 我正在使用ZeroMQ 2.1.10和C#CLR绑定/包装器,并在Mac OS X 10.6.8中进行开发。 这是迄今为止的故事: 我首先尝试在简单的Mono C#控制台应用程序中使用ZeroMq。 我用./configure构build了ZeroMQ,然后make和sudo make install ,安装共享库/usr/local/lib/libzmq.dylib 。 ZeroMq C#绑定clrzmq.dll是一个包装,通过C Api [DllImport]调用使用“核心”ZeroMqfunction。 testing应用程序没有工作,我认为是标准的ZeroMQ ./configure产生一个64位的输出,单声道只有32位。 然后我重build了ZeroMQ ./configure CFLAGS="-O -arch i386" CXXFLAGS="-O -arch i386" LDFLAGS="-arch i386" –disable-dependency-tracking 我简单的C#ZeroMq应用程序然后正常工作。 接下来,我尝试从iPhone模拟器中的iPhone应用程序中使用ZeroMq。 我发现iPhone只允许静态链接库(不允许dynamic库)。 这是通过改变所有的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库,它是针对我的构build机器的MacOS头文件和库而build立的,而不是针对iPhone SDK。 这被修复了 ./configure […]