4

我目前正在尝试为 iOS 构建 Boost.Locale,但我无法找到 iconv 库(我正在为 iOS 成功构建 Boost 的其他部分,例如threadfilesystem)。

我试图让 Boost.Build 自己找到它,我试图将ICONV_PATH变量设置为指向 iPhoneOS SDK iconv lib。检查 Boost.Locale 中的 Jamfile,我偶然发现了这条规则:

lib iconv 
  : 
  : <search>$(ICONV_PATH)/lib <link>shared <runtime-link>shared
  :
  : <include>$(ICONV_PATH)/include 
  ;

所以我认为设置-sICONV_PATH/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr足够了,因为这个目录包含一个lib和一个include包含 iconv 库和头文件的文件夹,但是 Boost 仍然找不到它,并吐出:

iconv (libc)             : no
iconv (separate)         : no
icu                      : no
icu (lib64)              : no
Boost.Locale needs either iconv or ICU library to be built.

请注意,我总是b2使用该--reconfigure选项进行调用,因此它不是缓存先前调用的结果(在上面的列表中会有一个尾随(cached)

那么,有没有办法正确地将 Boost 指向 iOS SDK 中的 iconv 实现?如果可能的话,我想避免建立一个单独的 iconv。

4

3 回答 3

5

我遇到了类似的问题。经过一些挖掘和一些红鲱鱼后,我了解到 boost 通过编译 has_iconv.cpp 程序来检测 iconv。就我而言(使用许多人似乎用于编译 iOS 的 boost.sh 脚本),由于 user-config.jam 中的 using-syntax 不正确而导致 config.log 中出现很多编译错误。所以问题 - 至少对我来说 - 不是设置 ICONV_PATH 而是让检测程序编译!也许你有类似的问题。

如果您有兴趣,我在我的博客中写了完整的发现

于 2016-08-17T06:30:47.060 回答
2

构建时您应该收到以下日志输出

如果在 Darwin/Mac OS X 构建中找不到 iconv 库,请确保没有多个 iconv 安装并提供 -sICONV_PATH 构建选项以指向 iconv 库的正确位置。

首先,您需要引导位置,其中 $ICU = ICU 根目录以及构建 ICU 构建产品所在的目录(“bin/”、“include/”等):

.\bootstrap --with-icu=$ICU

然后

.\b2 boost.locale.icu=on boost.locale.std=off -sICU_PATH="$ICU" --with-chrono --with-locale --with-system --with-thread link=static stage cxxflags="-miphoneos-version-min=9.0 -stdlib=libc++"
于 2015-11-18T18:27:45.817 回答
1

迟到的答案,但这是一个使用 iconv 库(boost v1_64_0)在 iOS 上支持 Boost.Locale 的工作配置。https://github.com/Cogosense/iOSBoostFramework提供了一个实现,它使用 Makefile 为 armv7、armv7s、arm64、i386 和 x86_64 架构构建 boost 框架。

要构建 32 位 ARM,请创建一个包含以下内容的user-config.jam :

using clang-darwin : arm                                                                                                                                                  
    : xcrun --sdk iphoneos clang++
    : <cxxflags>"-miphoneos-version-min=8.0  -arch armv7s -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11 -D_LITTLE_ENDIAN -Wall -pedantic -Wno-unused-variable"
      <linkflags>"-arch armv7s"
      <striper>
    ;

架构也可以设置为armv7 ,根据自己的喜好更改cxxflags的值,但 -arch标志是必需的。

使用以下构建命令为 32 位 iPhone 目标构建 boost:

BOOST_BUILD_USER_CONFIG=<path-to-arm32-jam-config>/user-config.jam \
SDK_PATH=$(xcrun --sdk iphoneos --show-sdk-platform-path) \
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneOS.sdk/usr \
    toolset=clang-darwin-arm \
    target-os=iphone

要构建 64 位 ARM,请创建一个包含以下内容的user-config.jam :

using clang-darwin : arm64                                                                                                                                                  
    : xcrun --sdk iphoneos clang++
    : <cxxflags>"-miphoneos-version-min=8.0  -arch arm64 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11 -D_LITTLE_ENDIAN -Wall -pedantic -Wno-unused-variable"
      <linkflags>"-arch arm64"
      <striper>
    ;

使用以下构建命令为 64 位 iPhone 目标构建 boost:

BOOST_BUILD_USER_CONFIG=<path-to-arm64-jam-config>/user-config.jam \
SDK_PATH=$(xcrun --sdk iphoneos --show-sdk-platform-path) \
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneOS.sdk/usr \
    toolset=clang-darwin-arm64 \
    target-os=iphone

要构建 32 位 x86 模拟器,请创建一个包含以下内容的user-config.jam :

using clang-darwin : x86                                                                                                                                                  
    : xcrun --sdk iphonesimulator clang++
    : <cxxflags>"-miphoneos-version-min=8.0  -arch i386 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11  -Wall -pedantic -Wno-unused-variable"
      <linkflags>"-arch i386"
      <striper>
    ; 

使用以下构建命令为 32 位 iPhone 模拟器构建 boost:

BOOST_BUILD_USER_CONFIG=<path-to-x86-jam-config>/user-config.jam \
SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-platform-path)
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneSimulator.sdk/usr \
    toolset=clang-darwin-i386 \
    target-os=iphone

要构建 64 位 x86 模拟器,请创建包含以下内容的user-config.jam :

using clang-darwin : x86_64                                                                                                                                                 
    : xcrun --sdk iphonesimulator clang++
    : <cxxflags>"-miphoneos-version-min=8.0  -arch x86_64 -DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -stdlib=libc++ -std=c++11  -Wall -pedantic -Wno-unused-variable"
      <linkflags>"-arch x86_64"
      <striper>
    ; 

使用以下构建命令为 64 位 iPhone 模拟器构建提升:

BOOST_BUILD_USER_CONFIG=<path-to-x86_64-jam-config>/user-config.jam \
SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-platform-path)
./b2 -sICONV_PATH=$SDK_PATH/Developer/SDKs/iPhoneSimulator.sdk/usr \
    toolset=clang-darwin-x86_64 \
    target-os=iphone
于 2017-06-11T01:15:44.120 回答