Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在OS X 10.8.4上为iOS模拟器(6.1)编译Boost 1.54.0(1.54)?_C++_Ios_Boost_C++11_Clang - Fatal编程技术网

C++ 如何在OS X 10.8.4上为iOS模拟器(6.1)编译Boost 1.54.0(1.54)?

C++ 如何在OS X 10.8.4上为iOS模拟器(6.1)编译Boost 1.54.0(1.54)?,c++,ios,boost,c++11,clang,C++,Ios,Boost,C++11,Clang,我已经成功地编译了几个Boost库,并使用以下脚本创建了一个用于OS X、iOS和iOS模拟器的框架:基于Peter Goodliffe的工作:使用Boost1.53.0使用clang和针对libc++的链接 使用Boost1.54.0为iOS模拟器编译脚本时失败,错误如下:/bin/sh:line 1:-ftemplate-depth-128:command not found 我做了很多挖掘工作,以下是我所知道的: 在boost.sh中,iOS模拟器bjam和编译器选项包括“-arch i

我已经成功地编译了几个Boost库,并使用以下脚本创建了一个用于OS X、iOS和iOS模拟器的框架:基于Peter Goodliffe的工作:使用Boost1.53.0使用clang和针对libc++的链接

使用Boost1.54.0为iOS模拟器编译脚本时失败,错误如下:
/bin/sh:line 1:-ftemplate-depth-128:command not found

我做了很多挖掘工作,以下是我所知道的:

  • 在boost.sh中,iOS模拟器bjam和编译器选项包括“-arch i386”
  • Boost 1.54.0的发行说明声明“Boost不再支持80386目标CPU”
  • Boost 1.53.0对于使用相同脚本的OSX、iOS和iOS模拟器来说似乎编译得很好
  • Boost 1.54.0似乎可以使用相同的脚本为OSX和iOS本身编译
以下是我认为我知道的:

  • 将“-d13”传递给bjam(以生成调试信息)时,似乎在构建iOS模拟器时未设置变量“CONFIG_COMMAND”。对于其他配置,此变量设置为clang的路径,并包含编译器选项。对于模拟器,它是空的,我认为这会导致上面的错误,因为当bjam尝试使用此变量运行编译器时,它会运行一些附加选项,这些选项以模板深度开始。因此,CONFIG_命令变量似乎未正确设置,从而导致故障
我不知道为什么没有设置它,因为我对Boost构建系统了解不够,无法筛选它使用“-d13”标志生成的其余100+MB输出。我怀疑1.54.0引入了与“-arch i386”选项的不兼容。我尝试将其更改为“-arch i486”和“-arch x86_32”,但出现了相同的问题


还有其他人在这方面取得了成功吗?我想使用Boost.Log,这就是为什么我要尝试这样做。

我前一阵子通过阅读Boost 1.53.0和1.54.0之间的每个jam文件的差异,发现了这一点,这是一项严肃的任务。我本想发布一个补丁,但只是找到原因花了我没有的时间,现在我不记得是什么了

不管怎么说,我确实记得我过去的快速解决方案,我一直在努力,直到最后期限。对于boost 1.54.0来说,它为bjam提供了“toolset=darwin-[version]~iphonesim”参数。您还可以为armbuilds toolset=darwin-[version]~iphone提供,尽管它并不需要它

例如,使用iOS 6.1 SDK:

./b2 toolset=darwin-6.1~iphonesim architecture=x86 target-os=iphone macosx-version=iphonesim-6.1 link=static variant=debug  define=BOOST_TEST_NO_MAIN define=BOOST_TEST_ALTERNATIVE_INIT_API linkflags="-stdlib=libc++" -j2 -d+2 -sICU_PATH=/usr/local/icu --without-python --layout=tagged --build-dir="/Users/wix/Desktop/boost_1_54_0/_build/simd_build" --stagedir="/Users/wix/Desktop/boost_1_54_0/_build/simd_stage" --debug-configuration stage
如果这对您不起作用,请让我知道,如果我有时间,我会将旧的build dir从备份中删除,看看我是否还做了什么。上面的命令来自我的histfile

此外,供参考,为了使仅针对v7和v7s的arm构建的ICU检查通过,并且ICU LIB也同样构建,请将以下补丁应用于tools/build/v2/tools/darwin.jam:

460,464c460,465
<             if $(instruction-set) {
<                 options = -arch$(_)$(instruction-set) ;
<             } else {
<                 options = -arch arm ;
<             }
---
>             #if $(instruction-set) {
>             #    options = -arch$(_)$(instruction-set) ;
>             #} else {
>             #    options = -arch arm ;
>             #}
>       options = -arch armv7 ;
460464C460465
#if$(指令集){
>#选项=-arch$(#)$(指令集);
>#}其他{
>#选项=-拱臂;
>             #}
>选项=-arch armv7;
此外,更一般地说,在~/user-config.jam中可能需要类似以下内容:

using clang : : : <cxxflags>"-std=c++11 -stdlib=libc++" <linkflags>"-stdlib=libc++" ;

using darwin : 6.1~iphone
   : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch armv7 -arch armv7s -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -stdlib=libc++ -miphoneos-version-min=5.1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
   : <striper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
   : <architecture>arm <target-os>iphone
   ;

using darwin : 6.1~iphonesim
   : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch i386 -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -stdlib=libc++ -miphoneos-version-min=5.1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk
   : <striper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
   : <architecture>x86 <target-os>iphone
   ;
使用clang::“-std=c++11-stdlib=libc++”-stdlib=libc++”;
使用darwin:6.1~iphone
:/Applications/Xcode.app/Contents/Developer/toolschains/XcodeDefault.xtoolschain/usr/bin/clang++-arch armv7-arch armv7s-fvisibility=hidden-fvisibility inlines hidden-std=c++11-stdlib=libc++-miphoneos version min=5.1-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.Platforms/Developer/SDKs/iPhoneOS6.1.sdk
:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
:arm iphone
;
使用darwin:6.1~iphonesim
:/Applications/Xcode.app/Contents/Developer/toolschains/Xcode default.xtoolschain/usr/bin/clang++-arch i386-fvisibility=hidden-fvisibility inlines hidden-stdlib=libc++-miphoneos version min=5.1-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk
:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
:x86 iphone
;
另外,为了正确构建模拟器的boost::context,我需要在libs/context/build/Jamfile.v2中添加以下内容:

alias asm_context_sources
   : asm/make_i386_sysv_macho_gas.S
     asm/jump_i386_sysv_macho_gas.S
   : <address-model>32
     <architecture>x86
     <binary-format>mach-o
     <target-os>iphone
     <toolset>darwin
   ;
别名asm\u上下文\u源
:asm/make_i386_sysv_macho_gas.S
asm/jump_i386_sysv_macho_gas.S
: 32
x86
马赫数
苹果手机
达尔文
;

通过更改buildBoostForiPhoneOS()中的行,我用这里给出的boost.sh构建了它

./bjam -j16 --build-dir=iphonesim-build --stagedir=iphonesim-build/stage --toolset=darwin-${IPHONE_SDKVERSION}~iphonesim architecture=x86 target-os=iphone macosx-version=iphonesim-${IPHONE_SDKVERSION} link=static stage
使用Boost pkg下载和解包进行了修改。只需要跑,一切都完成了

Boost 1.54
MacOSx 10.8.4
Xcode 4.6.3

根据这篇文章中的回复和其他人创建的脚本,我编写了一个bash脚本,该脚本使用Xcode 5为iOS和OSX构建了boost框架,即armv7、armv7s、arm64、i386和x86_64

看看这里


我确信它从1.49.0开始为那些有兴趣了解最新情况的人构建了boost:

您可以将BOOST 1.57.0与ofxiOSBoost静态库和头一起使用:

libc++(c++11)的发行版,libstdc++


所有构建脚本都在/scripts文件夹中(更新的Peter Goodliffe脚本)

我与您处境相同,我想知道您或其他人是否最终解决了此问题。据我所知,“-ftemplate-depth-128:command not found”可能是编译器的空白替换的结果,如下所示:${compiler}-ftemplate-depth-128
Boost 1.54
MacOSx 10.8.4
Xcode 4.6.3