2017-04-21 3 views
1

Ich versuche Boost 1.58 für Android NDK R14b mit Clang 3,8 zu bauen. Ich habe es richtig mit gcc arbeiten, aber es ist nicht der Fall mit Clang.Gebäude Boost (1.58) mit Clang (3.8) und Android NDK r14b

Durch den folgenden Befehl ausführen (es ist ein einziges Beispiel auf 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" 

Aber ich habe einige Fehler auf der signal.h Datei:

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. 

Gibt es jemanden, hat schon sowas gemacht oder könnte etwas falsch sehen?

+0

Sieht aus wie es könnte ein Fehler sein. Könnten Sie einen mit Repro-Anweisungen einreichen? https://github.com/android-ndk/ndk/issues –

Antwort

0

So hat es endlich für mich funktioniert. Ich erkannte, dass diese Fehler auf signal.h waren, weil das Ziel meines Compilers nicht wirklich definiert wurde. Ich wollte Schub für Arm 32 Bits bauen, aber in den "performing Konfigurationsüberprüfungen", es war: - 32 Bit: nein - 64 Bit: ja - Arm: ja

Also änderte ich mein Benutzer-config .jam in meinem Boost-Ordner:

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 
    ; 

Es scheint, dass Klappern keine Optionen wie und in gcc, so dass ich hinzugefügt, um ihren gemeinsamen absoluten Pfad in PATH-Variable:

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

und zu testen ein Build (zum Beispiel: Atom), ich ausgeführt aus meinem Boost-Ordner:

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 
Verwandte Themen