有没有人有关于为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脚本或终端说明)?或者,是否有人有预建库的链接?
答案 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)