【发布时间】:2016-05-31 04:22:49
【问题描述】:
我已经按照这些链接的描述编译了 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 的点云)中运行代码,并且我尝试编写一个 Android.mk 文件,但我有字段。
请注意,我正在使用带有 NDK 的 Android Studio,并使用 Windows 8 作为运行操作系统。
编辑: 我已经解决了 PCL 链接到我的项目的问题,该库已识别并且项目已成功构建。但是,当我在 Tango 设备上运行应用程序时,我得到了一个 UnsatisfiedLinkexception 如下:
? 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)
这是我的应用程序.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'
}
任何人都建议我解决这个错误
【问题讨论】:
标签: android android-ndk point-cloud-library google-project-tango