为Android构建PCL

时间:2015-03-25 21:08:05

标签: 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脚本或终端说明)?或者,是否有人有预建库的链接?

4 个答案:

答案 0 :(得分:5)

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

我能够通过编辑cmake文件

来解决CMAKE错误
pcl-superbuild/toolchains/toolchain-android.cmake 

这两项更改应该超越上述错误:

set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86" ) # Line 468

应该是

set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86_64" )

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

if( ANDROID_NDK_RELEASE STRGREATER "r8" ) # r8b

应该是

if( ANDROID_NDK_RELEASE STRGREATER "r10" ) # r8b

第一个更改将_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

编辑第99-102行:

# define pcl_isnan(x)    isnan(x)
# define pcl_isfinite(x) isfinite(x)
# define pcl_isinf(x)    isinf(x)

他们应该是:

# define pcl_isnan(x)    std::isnan(x)
# define pcl_isfinite(x) std::isfinite(x)
# define pcl_isinf(x)    std::isinf(x)

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

**编辑:**

这并不能让你一直(不幸的是)因为升级库不能很好地与C ++ 11配合使用。

要解决此问题,请从http://sourceforge.net/projects/boost/files/boost/1.55.0/下载提升1.55,然后覆盖提升目录

pcl-superbuild/CMakeExternals/Source/boost/boost_1_45_0

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

接下来,修改

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

找到这一行:

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

替换为

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

就我而言

答案 1 :(得分:2)

此链接有很多帮助,你可以看看。我还在那里留下了一些评论..

http://www.hirotakaster.com/weblog/how-to-build-pcl-for-android-memo/

对于使用ndk r10d编译pcl 1.6,你需要用opencv库中的工具链替换toolchain-android.cmake

答案 2 :(得分:0)

我使用32位的Ubuntu 14.10构建了PCL及其依赖项。我还必须使用32位的NDK r8c。构建Hirotakaster超级构建的关键是使用32位操作系统。

答案 3 :(得分:0)

我设法使用Ubuntu 15.10 64位和NDK r10e编译你的超级版本。我用OpenCV中的那个更改了toolchain-android.cmake。然后在common.hpp中(在/ Source / pcl / common / include / pcl / common / impl中找到)我必须添加以下行:

#include< math.h>

#define pcl_isnan(x)std :: isnan(x)

#define pcl_isfinite(x)std :: isfinite(x)

#define pcl_isinf(x)std :: isinf(x)