2017-04-21 5 views
1

clang 3.8でアンドロイドNDK r14bのブースト1.58を構築しようとしています。私はそれをgccと一緒に働いていますが、clangの場合はそうではありません。次のコマンドを実行してClang(3.8)とAndroid NDKのビルドブースト(1.58)r14b

(それはprogram_options libに上の単一の一例です):

"androidNDK/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++" 
-c 
-x c++ 
-std=c++11 
--stdlib=libc++ 
-mthumb 
-Os 
-O2 
-g 
-Wno-unused-local-typedefs 
-O3 
-Wno-inline 
-Wall 
--sysroot=androidNDK/platforms/android-24/arch-arm 
-I"androidNDK/sources/cxx-stl/llvm-libc++/include" 
-D_GLIBCXX__PTHREADS 
-D__arm__ 
-D_REENTRANT 
-D__ANDROID__ 
-DANDROID 
-pthread 
-std=c++11 
--stdlib=libc++ 
-mthumb 
-fno-strict-aliasing 
-DBOOST_ALL_NO_LIB=1 
-DBOOST_TEST_NO_MAIN 
-DNDEBUG 
-D_HAS_EXCEPTIONS=0 
-D_LITTLE_ENDIAN 
-I"." 
-o "bin.v2\libs\program_options\build\clang-linux-android\release\link-static\runtime-link-static\target-os-linux\threadapi-pthread\threading-multi\config_file.o" "libs\program_options\src\config_file.cpp" 

しかし、私はsignal.hにファイル上のいくつかのエラーを取得:

clang++.exe: warning: argument unused during compilation: '-mthumb' 
clang++.exe: warning: argument unused during compilation: '-mthumb' 
In file included from libs\program_options\src\config_file.cpp:8: 
In file included from .\boost/program_options/config.hpp:10: 
In file included from .\boost/config.hpp:57: 
In file included from .\boost/config/platform/linux.hpp:74: 
In file included from .\boost/config/posix_features.hpp:18: 
In file included from androidNDK/platforms/android-24/arch-arm/usr/include\unistd.h:34: 
In file included from androidNDK/platforms/android-24/arch-arm/usr/include\sys/select.h:35: 

androidNDK/platforms/android-24/arch-arm/usr/include\signal.h:86:18: error: expected ';' at 

     end of declaration list 
    sighandler_t sa_handler; 
       ^
androidNDK/platforms/android-24/arch-arm/usr/include\asm/signal.h:101:22: note: expanded 
     from macro 'sa_handler' 
#define sa_handler _u._sa_handler 
        ^
In file included from libs\program_options\src\config_file.cpp:8: 
In file included from .\boost/program_options/config.hpp:10: 
In file included from .\boost/config.hpp:57: 
In file included from .\boost/config/platform/linux.hpp:74: 
In file included from .\boost/config/posix_features.hpp:18: 
In file included from androidNDK/platforms/android-24/arch-arm/usr/include\unistd.h:34: 
In file included from androidNDK/platforms/android-24/arch-arm/usr/include\sys/select.h:35: 

androidNDK/platforms/android-24/arch-arm/usr/include\signal.h:87:12: error: expected ')' 
    void (*sa_sigaction)(int, struct siginfo*, void*); 
     ^
androidNDK/platforms/android-24/arch-arm/usr/include\asm/signal.h:102:24: note: expanded 
     from macro 'sa_sigaction' 
#define sa_sigaction _u._sa_sigaction 
        ^
androidNDK/platforms/android-24/arch-arm/usr/include\signal.h:87:10: note: to match this 
     '(' 
    void (*sa_sigaction)(int, struct siginfo*, void*); 
     ^
androidNDK/platforms/android-24/arch-arm/usr/include\signal.h:87:12: error: duplicate 
     member '_u' 
    void (*sa_sigaction)(int, struct siginfo*, void*); 
     ^
androidNDK/platforms/android-24/arch-arm/usr/include\asm/signal.h:102:22: note: expanded 
     from macro 'sa_sigaction' 
#define sa_sigaction _u._sa_sigaction 
        ^
androidNDK/platforms/android-24/arch-arm/usr/include\signal.h:86:18: note: previous 
     declaration is here 
    sighandler_t sa_handler; 
       ^
androidNDK/platforms/android-24/arch-arm/usr/include\asm/signal.h:101:20: note: expanded 
     from macro 'sa_handler' 
#define sa_handler _u._sa_handler 
       ^
3 errors generated. 

を誰誰がありますすでにこのようなことをしているか、何か間違っていると見ることができますか?

+0

これはバグかもしれません。あなたはrepro命令でファイルを提出できますか? https://github.com/android-ndk/ndk/issues –

答えて

0

それで、それはついに私のために働いた。 signal.hのこれらのエラーは、私のコンパイラのターゲットが実際には定義されていないためであることに気付きました。私は、アーム32ビット用のブーストを構築したかったが、「実行コンフィギュレーションの確認」で、それはだった: - 32ビット:なし - 64ビット:はい - アーム:そうです

、私は私のユーザー設定を変更しました私のブーストフォルダ内の.jamファイル:

import os ; 
androidNDKRoot = E:/androidNDK ; # put the relevant path 
using clang : android : 
    $(androidNDKRoot)/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++ : 
    <compileflags>--sysroot=$(androidNDKRoot)/platforms/android-21/arch-arm 
    <compileflags>-I$(androidNDKRoot)/sources/cxx-stl/llvm-libc++/include 
    <compileflags>-I$(androidNDKRoot)/sources/cxx-stl/llvm-libc++abi/include 
    <compileflags>-I$(androidNDKRoot)/sources/android/support/include 
    <compileflags>-g 
    <compileflags>-Os 
    <compileflags>-O2 
    <compileflags>--target=armv7a-none-linux-androideabi 
    ; 

打ち鳴らすのようなとgccのオプションを持っていないようですので、私は、PATH変数にその共通絶対パスを追加しました:

set PATH=%PATH%;E:\androidNDK\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\arm-linux-androideabi\bin\ 

とテストへビルド(例:アトミック)、私は実行しました私のブーストフォルダから:

b2.exe --user-config=tools\build\src\build\user-config.jam target-os=android toolset=clang-android link=static runtime-link=static variant=debug threading=multi -q -a -j6 --with-atomic