无法为 iOS 应用构建 rabbitmq-c

Not able to build rabbitmq-c for iOS application

我正在尝试在 iOS 应用程序中使用 RabbitMq。如recommended, I am using this Objective-C wrapper,其中规定:没有什么可建的。只需将源文件和 header 文件包含到您的 Xcode 项目中,然后 link 再次 librabbitmq-c。 但是,到目前为止我无法构建该应用程序.我正在使用 GitHub.

上可用的最新稳定版本

1/ 我已尝试在我的项目中包含所有文件(rabbitmq-objc 和 rabbitmq-c),并照常构建(按照建议 here)。在按照 XCode 的建议替换了一些类型(uint8 到 u_int8_t)并解决了一些导入("amqp.h" 而不是 < amqp.h>)之后,我最终遇到了这个错误: 命令 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 失败,退出代码为 254。我深度清理了项目,删除了 ~/Library/Developer/Xcode/DerivedData 的内容,但没有成功。

2/ 然后我尝试通过 command-line 使用 cmake 构建 rabbitmq-c :

mkdir build && cd build
cmake ..
cmake --build . --config Release

然后在我的项目中作为动态库导入。在项目中 linking 时,XCode 抱怨 为 iOS 模拟器构建,但 linking 反对为 MacOSX 文件构建的 dylib .我已经阅读了一些关于如何解决这个问题的文章 post,但我不确定具体如何进行。

3/ 因此,我终于在 MacOS 上使用了 CMake.app,将生成器设置为 XCode。我导入了作为动态库构建的 rabbitmq-c.xcodeproj,并将 header 路径设置为正确的文件夹。将其他 linker 标志设置为 -ObjC -all_load 后,我仍然收到错误消息:no such file or directory: '/Users/Guillaume/Library/Developer/Xcode/DerivedData/RabbitMQSandbox-bvhczedxhtejhxcwdqmdewzzexjj/Build/Products/Debug-iphonesimulator/librabbitmq.4.0.0.dylib'.

我正在失去希望。有人可以指出我正确的方向吗?

终于找到了,留给大家参考

1/ 获取最新的 rabbitmq-c and rabbitmq-objc 库。

2/ 确保 Cmake 已更新(2.6 或更高版本)

3/安装iOS-cmake

4/ 在 rabbitmq-c 目录中(更改模拟器或设备的 OSX_ARCHITECTURES 和 IOS_PLATFORM 标志)

mkdir build.ios && cd build.ios
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/iOS.cmake 
-DIOS_PLATFORM=SIMULATOR (resp. OS) 
-DCMAKE_IOS_DEVELOPER_ROOT=/Applications/Xcode.app/Contents/Developer     
-DCMAKE_IOS_SDK_ROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.2.sdk 
-DCMAKE_OSX_ARCHITECTURES=x86_64 (resp. i386)
-DBUILD_STATIC_LIBS=True 
-DENABLE_SSL_SUPPORT=False 
-GXcode ..

5/ 在 build.os/librabbitmq 中,将目录 Debug 重命名为 Debug-iphonesimulator。在 XCode 中打开 librabbitmq-c.xcodeproj,select 目标 rabbitmq-static,构建并关闭该项目。

6/ 导入将使用库 librabbitmq.a 的项目。在构建设置中,确保 Always Search User Paths 设置为 Yes 并且 User Header Search Path 包含到 rabbitmq-c/librabbitmq 和 rabbitmq-c/build.ios/rabbitmq-c.[=25= 的路径]

7/ 复制项目中的rabbitmq-objc 类,并为那些类.

设置-fno-objc-arc标志

8/ 将出现的 uint8 替换为 u_int8_t,将出现的 #import < Cocoa/Cocoa.h> 替换为 #import < Foundation/Foundation.h>,将出现的 #import < amqp.h> 和 [=19= 替换] #import "amqp.h"#import "amqp_framing.h".

9/ 在AMQPConsumer.m中,在函数amqp_basic_consume中添加缺少的参数AMQP_EMPTY_TABLE,在AMQPExchange.m中添加缺少的

#define AMQP_EXCHANGE_TYPE_DIRECT @"direct" 
#define AMQP_EXCHANGE_TYPE_FANOUT @"fanout"
#define AMQP_EXCHANGE_TYPE_TOPIC @"topic"

10/ 构建项目。