Этот скрипт сборки не работает с современным NDK, но его можно сделать несколько проще (патч ниже).При этом я вижу, что он строит для arm64, поэтому, вероятно, ваша проблема - ошибка в их старом файле cmake toolchain (для перехода на современный NDK требуется перейти на тот, который предоставляется NDK, а не на тот репозиторий, который работает).
К сожалению, существует ряд других проблем с хранилищем (в коде есть некоторые тонкие ошибки, которые не видны на всех платформах / компиляторах, но отображаются при сборке для Android).Они кажутся в значительной степени тривиальными исправлениями.
diff --git a/pcl-build-for-android.sh b/pcl-build-for-android.sh
index f4f1a70..da6ac84 100755
--- a/pcl-build-for-android.sh
+++ b/pcl-build-for-android.sh
@@ -3,12 +3,11 @@
# specify the arm as abi, the api level for android kitkat as used by
# google tango and with gnustl_static the c++ support
# for more information look into the android.toolchain.cmake file
-export ANDROID_ABI="armeabi armeabi-v7a with NEON"
-export ANDROID_NATIVE_API_LEVEL=android-19
-export ANDROID_STL=gnustl_static
-export ANDROID_STL_FORCE_FEATURES=ON
+ANDROID_ABI="arm64-v8a"
+MIN_SDK_VERSION=19
+ANDROID_STL=c++_static
-export CFLAGS="-pipe -w"
+export CFLAGS="-w"
export CXXFLAGS=${CFLAGS}
[[ -z "${jobs}" ]] && jobs=$(grep -cP '^processor' /proc/cpuinfo)
@@ -25,7 +24,7 @@ fi
cd build
ROOT=${PWD}
-ANDROIDTOOLCHAIN=${ROOT}/../android.toolchain.cmake
+ANDROIDTOOLCHAIN=${ANDROID_NDK}/build/cmake/android.toolchain.cmake
EIGEN_INCLUDE_DIR=${ROOT}/eigen # eigen needs no cross-compiling
FLANN_ROOT=${ROOT}/flann
@@ -42,10 +41,23 @@ cmake . -DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=$ANDROIDTOOLCHAIN \
-DBUILD_EXAMPLES:BOOL=OFF \
-DBUILD_PYTHON_BINDINGS:BOOL=OFF \
- -DBUILD_MATLAB_BINDINGS:BOOL=OFF
+ -DBUILD_MATLAB_BINDINGS:BOOL=OFF \
+ -DANDROID_ABI=$ANDROID_ABI \
+ -DANDROID_PLATFORM=android-$MIN_SDK_VERSION \
+ -DANDROID_STL=$ANDROID_STL \
+
+if [ $? -ne 0 ]; then
+ echo >&2 Build failed
+ exit 1
+fi
make -j${jobs}
+if [ $? -ne 0 ]; then
+ echo >&2 Build failed
+ exit 1
+fi
+
cd ..
echo "FLANN cross-compiling finished!"
@@ -72,10 +84,23 @@ cd ${BOOST_ROOT}
cmake . -DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=$ANDROIDTOOLCHAIN \
- -DBUILD_SHARED_LIBS:BOOL=OFF
+ -DBUILD_SHARED_LIBS:BOOL=OFF \
+ -DANDROID_ABI=$ANDROID_ABI \
+ -DANDROID_PLATFORM=android-$MIN_SDK_VERSION \
+ -DANDROID_STL=$ANDROID_STL \
+
+if [ $? -ne 0 ]; then
+ echo >&2 Build failed
+ exit 1
+fi
make -j${jobs}
+if [ $? -ne 0 ]; then
+ echo >&2 Build failed
+ exit 1
+fi
+
cd ..
echo "BOOST cross-compiling finished!"
@@ -139,13 +164,22 @@ function cmake_pcl {
-DBoost_THREAD_LIBRARY=${Boost_LIBRARIES}/libboost_thread.a \
-DBoost_THREAD_LIBRARY_DEBUGBoost_INCLUDE_DIRS=${Boost_LIBRARIES}/libboost_thread.a \
-DBoost_THREAD_LIBRARY_RELEASE=${Boost_LIBRARIES}/libboost_thread.a \
- -DBoost_LIBRARY_DIRS=${Boost_LIBRARIES}
+ -DBoost_LIBRARY_DIRS=${Boost_LIBRARIES} \
+ -DANDROID_ABI=$ANDROID_ABI \
+ -DANDROID_PLATFORM=android-$MIN_SDK_VERSION \
+ -DANDROID_STL=$ANDROID_STL \
+
}
### pcl cmake files do not set library paths properly. Therefore cmake has to be run twice.
cmake_pcl
cmake_pcl
+if [ $? -ne 0 ]; then
+ echo >&2 Build failed
+ exit 1
+fi
+
echo -e "\n\n\033[1;32m make -j$jobs\033[m\n"
echo -e "\n\n\033[1;32m this will run for a while... time to drink a\n"
echo -e " ( ( "
@@ -157,9 +191,19 @@ echo -e " '----' \033[m\n\n"
make -j${jobs}
+if [ $? -ne 0 ]; then
+ echo >&2 Build failed
+ exit 1
+fi
+
echo -e "\n\n\033[1;35m make install\033[m\n\n"
make install
+if [ $? -ne 0 ]; then
+ echo >&2 Build failed
+ exit 1
+fi
+
cd ..
echo "PCL cross-compiling finished!"