4

現在、iOS 用の Boost.Locale をビルドしようとしていますが、iconv lib を見つけることができません (threadまたはiOS 用の Boost の他の部分を正常にビルドしていますfilesystem)。

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 
  ;

このディレクトリにはiconv libとヘッダーを含むフォルダーが含まれているため、に設定-sICONV_PATHする/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usrだけで十分だと思いましたが、Boostはまだそれを見つけられず、吐き出します:libinclude

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)上記のリストに末尾があります.

では、iOS SDK に存在する iconv 実装で Boost を正しく指す方法はありますか? 可能であれば、別の iconv を作成することは避けたいと思います。

4

3 に答える 3

5

私は同様の問題に遭遇していました。いくつかの掘り下げといくつかの赤いニシンの後、ブーストが has_iconv.cpp プログラムをコンパイルすることによって iconv を検出することを知りました。私の場合 (多くの人が iOS 用のコンパイルに使用しているように見える boost.sh スクリプトを使用)、 config.log に、 user-config.jam の using-syntax が正しくないために発生した多くのコンパイル エラーがありました。したがって、問題は、少なくとも私にとっては、ICONV_PATH を設定することではなく、検出プログラムをコンパイルすることでした。おそらく、あなたは同様の問題を抱えています。

興味があれば、ブログに発見の完全な記事を書きました。

于 2016-08-17T06:30:47.060 に答える
2

ビルド時に次のログ出力を受け取るはずです

Darwin/Mac OS X ビルドで iconv ライブラリが見つからない場合は、複数の iconv インストールがないことを確認し、iconv ライブラリの正しい場所を指す -sICONV_PATH ビルド オプションを指定します。

最初に、場所をブートストラップする必要があります。ここで、$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 をサポートする作業構成を次に示します。Makefile を使用して armv7、armv7s、arm64、i386、および x86_64 アーキテクチャ用のブースト フレームワークを構築する実装は、https://github.com/Cogosense/iOSBoostFrameworkから入手できます。

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_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_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_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 に答える