2017-04-21 1 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의 오류는 컴파일러의 타겟이 실제로 정의되지 않았기 때문에 발생한다는 것을 알았습니다. 어떤 - 64 비트 : 예 - 팔 : 예

그래서, 변경 내 사용자 설정 - 32 비트 : 나는 그것을이었다 아암 (32) 비트에 대한하지만 "수행하는 구성 점검"에 후원을 구축하고 싶어 .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 
관련 문제