为Android构建PCL

mar*_*duk 3 android android-ndk point-cloud-library

有没有人有关于为Android构建Point Cloud Library(PCL)的说明?我找到了一些声称可以构建PCL及其依赖项的PCL超级构建.我从http://www.hirotakaster.com/weblog/how-to-build-pcl-for-android-memo/尝试了超级构建.我使用的是Ubuntu 14.10,Android 19,NDK r10d和PCL 1.6.0,但我愿意使用任何版本.我也在使用终端进行编译.对于Android硬件,我使用的是Project Tango.

我尝试使用android-cmake(http://code.google.com/p/android-cmake/),但我不确定如何构建正确的工具链.我不断收到错误"在NDK中找不到任何有效的工具链.可能你的Android NDK坏了." 我也用普通的cmake和ccmake得到了这个错误.

有没有人有任何关于为Android构建PCL的详细说明(例如,bash脚本或终端说明)?或者,是否有人有预建库的链接?

wat*_*avi 5

(Caveat Emptor:这不是长期解决方案)

我能够通过编辑cmake文件来解决CMAKE错误

pcl-superbuild/toolchains/toolchain-android.cmake 
Run Code Online (Sandbox Code Playgroud)

这两个更改应该超过上面提到的错误:

set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86" ) # Line 468
Run Code Online (Sandbox Code Playgroud)

应该

set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86_64" )
Run Code Online (Sandbox Code Playgroud)

这将产生另一个错误,除非您更改以下行(第1023行)

if( ANDROID_NDK_RELEASE STRGREATER "r8" ) # r8b
Run Code Online (Sandbox Code Playgroud)

应该

if( ANDROID_NDK_RELEASE STRGREATER "r10" ) # r8b
Run Code Online (Sandbox Code Playgroud)

第一个更改将_64添加到x86_64.第二个增加了r10d的兼容性.

但这并不能解决所有错误,因为BOOST线程与GCC 4.6+不能很好地配合.实现此链接中显示的补丁(https://svn.boost.org/trac/boost/ticket/6165).

同样,这仍然无法解决所有错误.(我还没弄清楚为什么还需要这个,math.h不应该需要std::).在文件中,

pcl-superbuild/CMakeExternals/Source/pcl/common/include/pcl/pcl_macros.h
Run Code Online (Sandbox Code Playgroud)

编辑第99-102行:

# define pcl_isnan(x)    isnan(x)
# define pcl_isfinite(x) isfinite(x)
# define pcl_isinf(x)    isinf(x)
Run Code Online (Sandbox Code Playgroud)

他们应该是:

# define pcl_isnan(x)    std::isnan(x)
# define pcl_isfinite(x) std::isfinite(x)
# define pcl_isinf(x)    std::isinf(x)
Run Code Online (Sandbox Code Playgroud)

PCL仍然会产生很多警告,但至少它会编译(到目前为止)

**编辑:**

这不会让你一直(不幸的是)因为boost库与C++ 11不兼容.

要解决此问题,请从http://sourceforge.net/projects/boost/files/boost/1.55​​.0/下载boost 1.55 ,并覆盖 boost目录

pcl-superbuild/CMakeExternals/Source/boost/boost_1_45_0
Run Code Online (Sandbox Code Playgroud)

(第一次运行make时会创建此目录).

接下来,修改

PCL-superbuild/CMakeExternals /来源/升压/的CMakeLists.txt

并找到该行:

file(GLOB lib_srcs $ {boost_root}/libs/filesystem/v2/src/*.cpp)

用它替换它

文件(GLOB lib_srcs $ {boost_root}/libs/filesystem/src/*.cpp)

就我而言,这就是我的意思