使用Android NDK编译Boost:
$ cd Boost-for-Android/
修改成需要的版本:
$ vi build-android.sh
BOOST_VER2=70
$ export NDK_ROOT=/AndroidSDK/ndk-bundle
$ nohup ./build-android.sh /AndroidSDK/ndk-bundle &
生成位置:
$ ls build/out/arm64-v8a/*
include:
boost-1_70
lib:
cmake libboost_fiber-clang-mt-a64-1_70.a libboost_math_tr1-clang-mt-a64-1_70.a libboost_stacktrace_noop-clang-mt-a64-1_70.a
libboost_atomic-clang-mt-a64-1_70.a libboost_filesystem-clang-mt-a64-1_70.a libboost_math_tr1f-clang-mt-a64-1_70.a libboost_system-clang-mt-a64-1_70.a
libboost_chrono-clang-mt-a64-1_70.a libboost_graph-clang-mt-a64-1_70.a libboost_math_tr1l-clang-mt-a64-1_70.a libboost_test_exec_monitor-clang-mt-a64-1_70.a
libboost_container-clang-mt-a64-1_70.a libboost_iostreams-clang-mt-a64-1_70.a libboost_prg_exec_monitor-clang-mt-a64-1_70.a libboost_thread-clang-mt-a64-1_70.a
libboost_context-clang-mt-a64-1_70.a libboost_log-clang-mt-a64-1_70.a libboost_program_options-clang-mt-a64-1_70.a libboost_timer-clang-mt-a64-1_70.a
libboost_contract-clang-mt-a64-1_70.a libboost_log_setup-clang-mt-a64-1_70.a libboost_random-clang-mt-a64-1_70.a libboost_type_erasure-clang-mt-a64-1_70.a
libboost_coroutine-clang-mt-a64-1_70.a libboost_math_c99-clang-mt-a64-1_70.a libboost_regex-clang-mt-a64-1_70.a libboost_unit_test_framework-clang-mt-a64-1_70.a
libboost_date_time-clang-mt-a64-1_70.a libboost_math_c99f-clang-mt-a64-1_70.a libboost_serialization-clang-mt-a64-1_70.a libboost_wave-clang-mt-a64-1_70.a
libboost_exception-clang-mt-a64-1_70.a libboost_math_c99l-clang-mt-a64-1_70.a libboost_stacktrace_basic-clang-mt-a64-1_70.a libboost_wserialization-clang-mt-a64-1_70.a
使用Android NDK编译vsomeip的bind库(ENABLE_COMPAT表示兼容老的叫vsomeip,新的叫someip3):
$ mv 3.1.7.1.tar.gz vsomeip-3.1.7.1.tar.gz
$ tar -zxvf vsomeip-3.1.7.1.tar.gz
$ cd vsomeip-3.1.7.1/
$ vi CMake_build.sh
#!/bin/bash
set -x
BASEPATH=.
NDKPATH=/AndroidSDK/ndk-bundle
CMAKEPATH=/AndroidSDK/cmake/3.6.4111459/bin
PLATFORM=arm64-v8a
BUILDTYPE=Debug
#rm -rf CMakeCache.txt
#rm -rf CMakeFiles
#rm -rf cmake_install.cmake
#rm -rf Makefile
#rm -rf CTestTestfile.cmake
${CMAKEPATH}/cmake \
-DCMAKE_TOOLCHAIN_FILE=${NDKPATH}/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=${PLATFORM} \
-DANDROID_NDK=${NDKPATH} \
-DANDROID_NATIVE_API_LEVEL=29 \
-DANDROID_PLATFORM=android-29 \
-DANDROID_STL=c++_shared \
-DCMAKE_BUILD_TYPE=${BUILDTYPE} \
-DANDROID_TOOLCHAIN=clang \
-DBOOST_ROOT=${BASEPATH}/boost/arm64-v8a \
-DCMAKE_INSTALL_PREFIX=${BASEPATH}/out/ \
-DENABLE_COMPAT=1 \
-DVSOMEIP_INSTALL_ROUTINGMANAGERD=ON \
-DENABLE_MULTIPLE_ROUTING_MANAGERS=1 \
${BASEPATH}
make VERBOSE=1
make install
set +x
$ vi CMakeLists.txt
…
# OS
if (${CMAKE_SYSTEM_NAME} MATCHES “Android”)
set(OS “Android”)
set(DL_LIBRARY “”)
set(EXPORTSYMBOLS “”)
set(NO_DEPRECATED “”)
set(OPTIMIZE “”)
set(OS_CXX_FLAGS “-Wno-error=format-security -D_GLIBCXX_USE_NANOSLEEP -pthread -O -Wall -Wextra -Wformat -Wformat-security -Wconversion -fexceptions -fstrict-aliasing -fstack-protector-strong -fasynchronous-unwind-tables -fno-omit-frame-pointer -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -fPIE -pie -Wl,-z,relro,-z,now”)
endif (${CMAKE_SYSTEM_NAME} MATCHES “Android”)
if (${CMAKE_SYSTEM_NAME} MATCHES “Linux”)
…
# Boost
set(BOOST_ROOT ${CMAKE_SOURCE_DIR}/../Boost-for-Android/build/out/${ANDROID_ABI})
set(BOOST_INCLUDEDIR ${BOOST_ROOT}/include/boost-1_70)
set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib)
set(Boost_FOUND 1)
set(Boost_INCLUDE_DIR ${BOOST_ROOT}/include/boost-1_70)
set(Boost_LIBRARY_DIR ${BOOST_ROOT}/lib)
set(Boost_VERSION 107000)
#find_package( Boost 1.55 COMPONENTS system thread log REQUIRED )
include_directories( ${Boost_INCLUDE_DIR} )
…
else()
# set (CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -D${OS} ${OS_CXX_FLAGS} -DBOOST_LOG_DYN_LINK -g ${OPTIMIZE} -std=c++11 ${NO_DEPRECATED} ${EXPORTSYMBOLS}”)
set (CMAKE_CXX_FLAGS