Android를 위한 Boost 구축 기술

2591 단어 AndroidboostNDK

배경

  • 어떻게든 Boost를 이용해야 하는 상황(사용하고 싶은 라이브러리에서 Boost를 사용하고 코드를 다시 쓰는 것은 번거롭다 등)
  • Boost 기능을 모두 사용하는 것은 아님
  • Android의 경우 NDK 관계로 인해 컴파일러 지정이 변경됩니다(r19에서 standalone_toolchain.py로 컴파일러 설정이 deprecated가 되어 컴파일러의 직접 지정이 됨). 그래서 컴파일러 설정을 명확하게 하려고 합니다
  • 사실 저는 cmake로 구축하고 싶은데 bcmhttps://github.com/boost-cmake/bcm 등이 있습니다. 하지만 이상적인 것은 boost를submodule로 구축하고 싶어서 bcm 감각과 추구하는 것이 다르기 때문에 bjam/b2로 구축
  • 목표

  • NDK r19c or later
  • Boost 1.69.0
  • 인터넷에는 오래된 NDK를 대상으로 한 보도가 많기 때문에 NDK r19c or later(clang 한정+standard_toolchain이 아니라 aarch64-linux-android28-clang++처럼 컴파일러의 버전을 직접 지정합니다)를 사용하지 않습니다.
    참고로 gcc는 NDK18 정도에 폐지되었고 clang(+libc++)만 있습니다.

    BCP


    우선, boost를 모두 사용할 필요가 없기 때문에 bcp에서 필요한 모듈만 추출합니다.
    (bjam도 --without-*** 이런 방법이 있는데 귀찮아요)
    bcp에서 사용하고 싶은 기능 (+file?)에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다
    $ bcp <<packages>> /path/to/target
    
    컴파일러 라이브러리 (header 파일로만 완성) 가 필요 없을 때 종료합니다.
    고생하셨습니다.
    컴파일 라이브러리가 필요한 (e.g.system,thread에서
    build bootstrap.bat bootstrap.sh boostcpp.jam boost-build.jam
    
    bcp의 <<packages>>에 포함되어 있습니다.

    사용자 정의 설정 만들기

    user-config.jam에서 컴파일러를 지정합니다.$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin에 컴파일러가 있습니다.
    # Set path to toolchain
    local AndroidToolchainRoot =
    /home/syoyo/local/android-ndk-r19c/toolchains/llvm/prebuilt/linux-x86_64
    ;
    
    using clang
    : android
    : $(AndroidToolchainRoot)/bin/aarch64-linux-android28-clang++
    ;
    
    잠깐만.b2--user-config 옵션을 통해 파일의 위치를 지정합니다. toolset=clanguser-config.jam 설정을 볼 수 있습니다.
    $ ./configure
    $ ./b2 --reconfigure toolset=clang target-os=android link=static --user-config=user-config.jam
    
    버려진 함수에 대한 지원이 부족합니다.기본적으로 코어 1개만 사용하므로 CPU 코어 수 추적using clang 등을 참조하십시오.

    인스턴스


    의 README 및-j8

    TODO

  • link 주위boost/user-config.jam를 개선하여ldflags 등을 지정한다.현상so 구축 (link=dynamic) 이라면 user-config.jam 등을 찾을 수 없어서 오류가 발생했습니다.
  • cmake로 구축하려면(NDK r19c 또는 later에서)
  • b2에서 disablelzma 등 검색 강제
  • -lrt 컴파일러를 지정할 수 있습니까?
  • 좋은 웹페이지 즐겨찾기