【问题标题】:How to build Boost-Libraries for iPhone如何为 iPhone 构建 Boost-Libraries
【发布时间】:2010-12-07 08:43:02
【问题描述】:

谁能告诉我,在哪里可以找到详细指南,如何构建 Boost-Libraries 以便在 iPhone 设备上使用它。

我已经为 Mac 构建了库并且可以在我的项目中使用它们(仅在 iPhone-Simulator 上)。在为 iPhone-Device 构建项目时,XCode 给我一个警告:“文件不是必需的架构”以及其他一些错误。

请帮忙

【问题讨论】:

    标签: ios iphone xcode boost build


    【解决方案1】:

    使用 iPhone 静态库项目模板在 Xcode 中启动一个新项目。 然后导入源和头文件,并以这种方式编译。结果应该是一个与 iPhone 兼容的静态库

    【讨论】:

    • 谢谢,它工作得很好,而且很容易:) 现在,我为模拟器构建的库在模拟器上不起作用。例如错误消息:“boost::regex_error 的类型信息”,引用自:...”
    • 取决于库(我以前从未使用过 Boost),您可能需要进行一些小的代码更改才能使其工作...另外,请确保您设置了正确的链接器和编译器标志。
    【解决方案2】:

    我从这里开始: http://lists.boost.org/boost-build/2009/02/21326.php

    对于大多数 Boost,您可能不需要实际编译它,只需包含有用的标头即可。就我而言,我只是在我自己的 Xcode 项目中定义了编译器。

    【讨论】:

    • 非常好的建议只是包含 Boost 而不是编译它,为我节省了很多时间!
    【解决方案3】:

    嘿,我在我的 openFrameworks 插件中更新了 Pete Goodliffes 脚本:

    • 目前有arm64、armv7、i386、x86_64
    • Boost 1.59.0 或更高版本
    • libc++ / std=c++11 -- 现在是 libstdc++ 的可选版本
    • 预编译和脚本来构建自己(所以如果你需要 libstdc++ 很容易改变)
      • 支持 Xcode 7

    [https://github.com/danoli3/ofxiOSBoost][1]

    【讨论】:

    • 谢谢先生,您的构建脚本很有帮助!
    【解决方案4】:

    我们也使用 boost。为了简化将其包含到新应用程序中,我创建了一个 Xcode 项目,您可以将其放入您的工作区以包含 boost。它基于 Makefile,因此您需要安装 Xcode 命令行工具。

    项目在这里https://github.com/Cogosense/iOSBoostFramework

    将项目克隆到您的工作区,然后单击菜单文件->“将文件添加到工作区”。在文件查找器中选择iOSBoostFramework/iOSBoostFramework.xcodeproj,然后点击添加。

    iOSBoostFramework 目录中的 Makefile 控制构建的内容和构建方式。支持 Xcode 工作区依赖,bitcode 生成,只构建 Xcode 选择的目标架构。

    以下库是构建的 test、thread、atomic、signals、filesystem、regex、program_options、system date_time、serialization、exception、locale 和 random。

    所有独立的库和架构组合在一起,最终的构建输出是一个 FAT boost.framework 框架包,可以链接到应用程序中。

    boost 的版本在 Makefile 中指定(当前为 1.64.0),它被下载、为所有活动架构构建并安装在 xcode 指定的 BUILT_PRODUCTS_DIR 中。

    【讨论】:

      【解决方案5】:

      对于只有头文件 (.hpp) 的 boost 库,您可以设置从项目到它们的头搜索路径。

      对于带有源的 boost 库,您可以通过以下简单步骤为 ios 手机/模拟器构建静态库:

      1. 下载并解压增强版存档(来自https://www.boost.org/users/download/),例如:https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2

      2. 使用需要的库运行 bootstrap.sh 以构建例如“上下文”(格式 =library1,library2,...):

      ./bootstrap.sh --with-libraries=context
      
      1. 将带有正确路径的工具集添加到project-config.jamproject-config.jam
      # IOS ARM64
      using clang : iphoneos
      : xcrun clang -arch arm64 -stdlib=libc++ -std=c++11 -miphoneos-version-min=12.0 -fvisibility-inlines-hidden -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk
      ;
      
      # IOS x86_64
      using clang : iphonesimulator
      : xcrun clang -arch x86_64 -stdlib=libc++ -std=c++11 -miphoneos-version-min=12.0 -fvisibility-inlines-hidden -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk
      ;
      
      1. 创建并运行 build.sh 脚本(其中库名称为 libboost_<name>.a):
      lib=libboost_context.a
      dir='stage/lib'
      
      # Build arm64
      ./b2 -a -j4 toolset=clang-iphoneos binary-format=mach-o abi=aapcs link=static stage
      mv $dir/$lib $dir/arm64_$lib
      
      # Build x86_64
      ./b2 -a -j4 toolset=clang-iphonesimulator binary-format=mach-o abi=sysv link=static stage
      mv $dir/$lib $dir/x86_64_$lib
      
      # Make fat
      lipo -create $dir/arm64_$lib $dir/x86_64_$lib -output $dir/$lib
      

      现在您在“/stage/lib”目录中为 boost 上下文编译了下一个静态库:arm64_libboost_context.ax86_64_libboost_context.a 和胖一个 libboost_context.a

      【讨论】:

        【解决方案6】:

        当我想为手臂模拟器构建提升时,上一个答案对我有所帮助。当您有一台配备 M1 处理器的 Mac 并想使用模拟器时,您不能使用适用于 iPhone 的 arm64 版本。

        我将此添加到 project-config.jam:

        # IOS Arm Simulator
        using clang : iphonesimulatorarm64
        : xcrun clang -arch arm64 -stdlib=libc++ -std=c++11 -miphoneos-version-min=10.0 -fvisibility-inlines-hidden -target arm64-apple-ios10.0-simulator -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk  ;
        

        然后将 toolset=clang-iphonesimulatorarm64 传递给 b2 命令。

        【讨论】:

          猜你喜欢
          • 2019-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-19
          • 2022-07-15
          • 1970-01-01
          • 2015-06-05
          相关资源
          最近更新 更多