【发布时间】:2014-09-17 04:42:41
【问题描述】:
这是我的项目的 Android.mk 和 Application.mk 文件,其中包含一个 JNI 组件:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
include $(OPENCV_ANDROID_ROOT)/sdk/native/jni/OpenCV.mk
LOCAL_MODULE := exeFileName
LOCAL_CFLAGS := -Werror
LOCAL_SRC_FILES := file1.cpp file2.cpp file3.cpp
LOCAL_LDLIBS += -llog -landroid -lEGL -lGLESv1_CM
include $(BUILD_EXECUTABLE)
应用程序.mk
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := all
APP_MODULES := exeFileName
ndk-build 为所有架构成功构建可执行文件。但是当我尝试在 ./libs/x86/ 中运行可执行文件时,该可执行文件在我的 64 位 linux 桌面上无法识别有效。确切的错误是“bash:./libs/x86/exeFileName:没有这样的文件或目录” 我使用 ldd 检查了可执行文件是否缺少指向库的链接,这是输出:
linux-gate.so.1 => (0xf77b1000)
liblog.so => not found
libdl.so => not found
libz.so => not found
libandroid.so => not found
libEGL.so => not found
libGLESv1_CM.so => not found
libc.so => not found
libm.so => not found
libstdc++.so => not found
但是,如果我从手机上的 ./libs/armeabi/ 推送可执行文件并从设备上的 shell 执行它,它就可以工作。
您能帮我找出无法运行 x86 可执行文件的原因吗?
【问题讨论】:
-
您应该使用 x86 设备或模拟器; Android 可执行文件不会在桌面计算机上运行即使内核非常接近。
-
谢谢,亚历克斯!我将更改构建脚本以在 linux 环境中使用 g++。
标签: android opencv build android-ndk linker