【问题标题】:Not able to build rabbitmq-c for iOS application无法为 iOS 应用程序构建 rabbitmq-c
【发布时间】:2015-05-14 16:12:57
【问题描述】:

我正在尝试在 iOS 应用程序中使用 RabbitMq。作为recommended,我正在使用这个Objective-C wrapper,它规定:没有什么可构建的。只需将源文件和头文件包含到您的 Xcode 项目中,然后将其重新链接到 librabbitmq-c。 但是,到目前为止,我一直无法构建应用程序。我正在使用 GitHub 上可用的最新稳定版本。

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

2/ 然后我尝试通过命令行使用 cmake 构建 rabbitmq-c:

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

然后在我的项目中作为动态库导入。在项目中链接时,XCode 抱怨 为 iOS 模拟器构建,但链接到为 MacOSX 文件构建的 dylib。我已经阅读了一些关于如何解决此问题的帖子,但我不确定如何继续。

3/ 因此,我终于使用了 MacOS 的 CMake.app,将生成器设置为 XCode。我已导入作为动态库构建的 rabbitmq-c.xcodeproj,并将标头路径设置为正确的文件夹。将其他链接器标志设置为 -ObjC -all_load 后,我仍然收到错误消息:没有这样的文件或目录:'/Users/Guillaume/Library/Developer/Xcode/DerivedData/RabbitMQSandbox-bvhczedxhtejhxcwdqmdewzzexjj/Build/Products/Debug -iphonesimulator/librabbitmq.4.0.0.dylib'.

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

【问题讨论】:

    标签: ios objective-c c xcode rabbitmq


    【解决方案1】:

    终于找到了,供大家参考

    1/ 获取最新的rabbitmq-crabbitmq-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,选择目标rabbitmq-static,构建,关闭这个项目。

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

    7/复制项目中的rabbitmq-objc类,并为这些类设置-fno-objc-arc标志。

    8/ 将出现的uint8 替换为u_int8_t,将出现的#import < Cocoa/Cocoa.h> 替换为#import < Foundation/Foundation.h>,将出现的#import < amqp.h>#import < amqp_framing.h> 替换为#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/ 构建项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多