我编译了PCL-SuperBuild文件夹,因为这些链接描述了:
链接1:https://hcteq.wordpress.com/2014/07/14/compiling-pcl-for-android-in-windows-cmake-gui/# 链接2:http://www.hirotakaster.com/weblog/how-to-build-pcl-for-android-memo/
成功完成。但是,我不知道如何在我的项目中使用该库,任何人都可以详细说明吗?
我试图在https://github.com/roomplan/tango-examples-java.git中运行代码,使用PCL运行Point Cloud,我尝试编写Android.mk文件,但我有字段。
注意到,我使用Android Studio和NDK,Windows 8作为运行操作系统。
修改 我已经解决了PCL链接到我的项目的问题,图书馆已经认识到并且项目已成功构建。但是,当我在Tango设备上运行应用程序时,我得到了一个不满意的感觉,如下所示:
? E/art: dlopen("/data/app-lib/com.projecttango.experiments.javapointcloud-2/libhelloPcl.so", RTLD_LAZY) failed: dlopen failed: could not load library "libflann.so" needed by "libhelloPcl.so"; caused by library "libflann.so" not found
? D/AndroidRuntime: Shutting down VM
? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.projecttango.experiments.javapointcloud, PID: 2119
java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libflann.so" needed by "libhelloPcl.so"; caused by library "libflann.so" not found
at java.lang.Runtime.loadLibrary(Runtime.java:364)
at java.lang.System.loadLibrary(System.java:526)
at com.projecttango.experiments.javapointcloud.PointCloudActivity.onCreate(PointCloudActivity.java:81)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2160)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2246)
at android.app.ActivityThread.access$800(ActivityThread.java:136)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1197)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5030)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
这是我的Application.MK
APP_STL := gnustl_static
APP_ABI := armeabi-v7a
APP_PLATFORM := android-19
APP_CPPFLAGS := -frtti -fexceptions
Android.mk
LOCAL_PATH := $(call my-dir)
PROJECT_ROOT_FROM_JNI := ../../../../..
PROJECT_ROOT:= $(LOCAL_PATH)/$(PROJECT_ROOT_FROM_JNI)
PCL_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/pcl-android
BOOST_ANDROID_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/boost-android
FLANN_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/flann-android
EIGEN_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/eigen
# PCL libraries
PCL_STATIC_LIB_DIR := $(PCL_INCLUDE)/lib
BOOST_STATIC_LIB_DIR := $(BOOST_ANDROID_INCLUDE)/lib
FLANN_STATIC_LIB_DIR := $(FLANN_INCLUDE)/lib
PCL_STATIC_LIBRARIES := pcl_common pcl_geometry pcl_kdtree pcl_octree pcl_sample_consensus pcl_surface \
pcl_features pcl_keypoints pcl_search pcl_tracking pcl_filters pcl_ml \
pcl_registration pcl_segmentation
BOOST_STATIC_LIBRARIES := boost_date_time boost_iostreams boost_regex boost_system \
boost_filesystem boost_program_options boost_signals boost_thread
FLANN_STATIC_LIBRARIES := flann_s flann_cpp_s
define build_pcl_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(PCL_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
define build_boost_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(BOOST_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
define build_flann_static
include $(CLEAR_VARS)
LOCAL_MODULE:=$1
LOCAL_SRC_FILES:=$(FLANN_STATIC_LIB_DIR)/lib$1.a
include $(PREBUILT_STATIC_LIBRARY)
endef
$(foreach module,$(PCL_STATIC_LIBRARIES),$(eval $(call build_pcl_static,$(module))))
$(foreach module,$(BOOST_STATIC_LIBRARIES),$(eval $(call build_boost_static,$(module))))
$(foreach module,$(FLANN_STATIC_LIBRARIES),$(eval $(call build_flann_static,$(module))))
include $(CLEAR_VARS)
# Project and linking
#opencv
#OPENCVROOT:= $(LOCAL_PATH)/../../../../../OpenCV-android-sdk
#OPENCV_CAMERA_MODULES:=on
#OPENCV_INSTALL_MODULES:=on
#OPENCV_LIB_TYPE:=SHARED
#include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk
LOCAL_MODULE := helloPcl
#LOCAL_SHARED_LIBRARIES := tango_client_api
LOCAL_CFLAGS := -std=gnu++11
#-Werror -std=c++11
LOCAL_SRC_FILES := hello-pcl.ccp
LOCAL_C_INCLUDES := $(PROJECT_ROOT)/tango-gl/include \
$(PROJECT_ROOT)/third-party/glm/ \
$(PCL_INCLUDE)/include/pcl-1.6 \
$(BOOST_ANDROID_INCLUDE)/include \
$(EIGEN_INCLUDE) \
$(FLANN_INCLUDE)/include
LOCAL_LDFLAGS += -L$(PCL_INCLUDE)/lib \
-L$(BOOST_ANDROID_INCLUDE)/lib \
-L$(FLANN_INCLUDE)/lib
LOCAL_SHARED_LIBRARIES += pcl_common pcl_geometry pcl_search pcl_kdtree pcl_octree pcl_sample_consensus \
pcl_surface pcl_features pcl_filters pcl_keypoints pcl_tracking pcl_ml \
pcl_registration pcl_segmentation
LOCAL_SHARED_LIBRARIES += boost_date_time boost_iostreams boost_regex boost_system \
boost_filesystem boost_program_options boost_signals boost_thread
LOCAL_SHARED_LIBRARIES += flann flann_cpp
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib \
-lstdc++ -lc -lm -llog -landroid -ldl -lGLESv2 -lEGL \
-lpcl_common -lpcl_geometry -lpcl_search -lpcl_kdtree -lpcl_octree -lpcl_sample_consensus \
-lpcl_surface -lpcl_features -lpcl_filters -lpcl_keypoints -lpcl_tracking -lpcl_ml \
-lpcl_registration -lpcl_segmentation \
-lflann -lflann_cpp
LOCAL_CFLAGS += -mfloat-abi=softfp -mfpu=neon -march=armv7 -mthumb -O3
include $(BUILD_SHARED_LIBRARY)
#$(call import-add-path, $(PROJECT_ROOT))
#$(call import-module,tango_client_api)
注意:我已将PCL代码更改为链接中的HelloPCL示例:https://github.com/otherlab/pcl/blob/master/mobile_apps/android/PCLAndroidSample
我的app.gradle如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.projecttango.experiments.javapointcloud"
minSdkVersion 19
targetSdkVersion 19
versionCode 1
versionName "1.0"
ndk {
moduleName 'helloPcl'
}
}
sourceSets.main {
jni.srcDirs = [];
jniLibs.srcDir 'src/main/libs'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build.cmd",
'-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
'-j', Runtime.runtime.availableProcessors(),
'all',
'NDK_DEBUG=1'
}
task cleanNative(type: Exec, description: 'Clean JNI object files') {
def ndkDir = android.ndkDirectory
commandLine "$ndkDir/ndk-build.cmd",
'-C', file('src/main/jni').absolutePath, // Change src/main/jni the relative path to your jni source
'clean'
}
clean.dependsOn 'cleanNative'
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNative
}
def external_lib_prefix = null
if (project.hasProperty("Tango.catkin_devel_prefix")) {
external_lib_prefix = project.property("Tango.catkin_devel_prefix")
} else {
// Building in standalone sample form.
external_lib_prefix = "../../TangoReleaseLibs"
}
repositories{
flatDir{
dirs external_lib_prefix + '/aar'
}
}
dependencies {
compile(name: 'tango-ux-support-library', ext: 'aar')
compile(name: 'tango_support_java_lib', ext: 'aar')
compile 'org.rajawali3d:rajawali:1.0.294-SNAPSHOT@aar'
compile(name: 'TangoUtils', ext: 'aar')
testCompile 'junit:junit:4.12'
}
任何人都会在此错误中向我提出建议
答案 0 :(得分:0)
我上面修复了我的问题,实际上我写了hello-pcl.ccp而不是hello-pcl.cpp。
现在,我在PCL文件中存在构建问题。 样本:
C:\Users\M\Desktop\Android_Projects_(Master)\tango-examples-java-master\PCL\pcl-android\include\pcl-1.6\pcl\pcl_base.h
Error:(303, 40) error: use of deleted function 'boost::shared_ptr<const sensor_msgs::PointCloud2>::shared_ptr(const boost::shared_ptr<const sensor_msgs::PointCloud2>&)'
Error:(329, 39) error: use of deleted function 'boost::shared_ptr<std::vector<int> >::shared_ptr(const boost::shared_ptr<std::vector<int> >&)'
getIndices () { return (indices_); }
和
C:\Users\M\Desktop\Android_Projects_(Master)\tango-examples-java-master\PCL\pcl-android\include\pcl-1.6\pcl\kdtree\kdtree_flann.h
Error:(386, 25) error: use of deleted function 'boost::shared_ptr<const std::vector<int> >::shared_ptr(const boost::shared_ptr<const std::vector<int> >&)'
Error:(393, 23) error: use of deleted function 'boost::shared_ptr<const pcl::PointCloud<Eigen::Matrix<float, -1, -1> > >::shared_ptr(const boost::shared_ptr<const pcl::PointCloud<Eigen::Matrix<float, -1, -1> > >&)'
return (input_);
我不明白为什么它会在库文件中给我错误和其他警告?
由于
修改强> 我在源文件夹中将我的提升版本更改为1.55。 另外,我已将Android.mk更改为以下内容:
LOCAL_PATH := $(call my-dir)
PROJECT_ROOT_FROM_JNI := ../../../../..
PROJECT_ROOT:= $(LOCAL_PATH)/$(PROJECT_ROOT_FROM_JNI)
PCL_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/pcl-android
BOOST_ANDROID_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/boost
FLANN_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/flann-android
EIGEN_INCLUDE := $(LOCAL_PATH)/../../../../../PCL/eigen
BOOST_ANDROID := $(LOCAL_PATH)/../../../../../PCL/boost-android
include $(CLEAR_VARS)
# Project and linking
#opencv
#OPENCVROOT:= $(LOCAL_PATH)/../../../../../OpenCV-android-sdk
#OPENCV_CAMERA_MODULES:=on
#OPENCV_INSTALL_MODULES:=on
#OPENCV_LIB_TYPE:=SHARED
#include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk
LOCAL_MODULE := helloPcl
#LOCAL_SHARED_LIBRARIES := tango_client_api
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_CFLAGS := --std=c++11 -fexceptions
#-std=gnu++11
#-Werror -std=c++11
LOCAL_SRC_FILES := hello-pcl.cpp
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
LOCAL_C_INCLUDES := $(PCL_INCLUDE)/include/pcl-1.6/ \
$(BOOST_ANDROID_INCLUDE)/boost_1_45_0/ \
$(EIGEN_INCLUDE)/ \
$(FLANN_INCLUDE)/include/
LOCAL_LDFLAGS += -L$(PCL_INCLUDE)/lib \
-L$(BOOST_ANDROID_INCLUDE)/lib \
-L$(FLANN_INCLUDE)/lib
LOCAL_SHARED_LIBRARIES += pcl_common pcl_geometry pcl_search pcl_kdtree pcl_octree pcl_sample_consensus \
pcl_surface pcl_features pcl_filters pcl_keypoints pcl_tracking pcl_ml \
pcl_registration pcl_segmentation
LOCAL_SHARED_LIBRARIES += boost_date_time boost_iostreams boost_regex boost_system \
boost_filesystem boost_program_options boost_signals boost_thread
LOCAL_SHARED_LIBRARIES += flann flann_cpp
#LOCAL_CFLAGS += -mfloat-abi=softfp -mfpu=neon -march=armv7 -mthumb -O3
LOCAL_LDLIBS := -llog -lGLESv2 -L$(BOOST_ANDROID)/lib -lboost_system
# Boost Libraries
LOCAL_LDLIBS += -L$(BOOST_ROOT)/libs/armeabi-v7a/
# PCL Libraries
LOCAL_LDLIBS += -L$(PCL_ROOT)/lib/ -lpcl_io -lpcl_io_ply -lpcl_common -lpcl_octree \
-lstdc++ -lc -lm -llog -landroid -ldl -lGLESv2 -lEGL \
-lpcl_common -lpcl_geometry -lpcl_search -lpcl_kdtree -lpcl_octree -lpcl_sample_consensus \
-lpcl_surface -lpcl_features -lpcl_filters -lpcl_keypoints -lpcl_tracking -lpcl_ml \
-lpcl_registration -lpcl_segmentation \
-lflann -lflann_cpp
include $(BUILD_SHARED_LIBRARY)
正如我在下面的评论中所说,所有问题都已解决,但我遇到了问题
无法加载“libhelloPcl.so”所需的库“libflann.so”