Android exe链接系统共享对象(.so文件)作为本地共享对象(.so文件)
Android exe linking system shared object (.so file) as local shared object (.so file)
我现在已经在这上面浪费了两天时间。解决问题的任何指示都会很有帮助。
我的 Android.mk 文件如下。
问题是 libst.so 应该 link 作为一个系统,所以我的可执行文件 opti.
但是,当我以十六进制打开可执行文件时,它会列出 so 文件 libst.so 的完整路径。而其他依赖的 so 文件则被正确列出。
这最终导致 CANNOT LINK EXECUTABLE 错误,因为正在本地路径中搜索 so 文件
例如
/media/ExtHDD/NIEL/OPTI/TEST/optimize/workspace/android/obj/local/armeabi-v7a/libst.so" 未找到
而不是在里面寻找
/system/lib/libst.所以它应该理想地寻找哪里。
任何指点或建议都会有很大帮助。谢谢。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
SRC_PATH := ${LOCAL_PATH}/../../..
LOCAL_MODULE := libsmp
LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/libs_beta/armeabi-v7a/libsmp.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_ARM_NEON := true
LOCAL_MODULE := libocv
LOCAL_SRC_FILES := ${LOCAL_PATH}/lib/libs_beta/armeabi-v7a/libOCv.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libst
LOCAL_SRC_FILES := ${LOCAL_PATH}/lib/libs_beta/armeabi-v7a/libst.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := opti
LOCAL_SRC_FILES := \
$(SRC_PATH)/main.cpp \
LOCAL_C_INCLUDES += \
$(SRC_PATH) \
$(SRC_PATH)/util \
$(SRC_PATH)/src \
$(LOCAL_PATH)/lib/include_beta \
$(LOCAL_PATH)/lib/include_beta/opencv \
$(LOCAL_PATH)/lib/include_beta/opencv2
LOCAL_SHARED_LIBRARIES += libc libsmp libocv libst
LOCAL_CFLAGS += -std=c++11 -fopenmp -fpermissive -mfloat-abi=softfp -mfpu=neon -flax-vector-conversions
LOCAL_LDLIBS += -llog -L$(SYSROOT)/usr/lib
LOCAL_CFLAGS += -fPIE
LOCAL_LDFLAGS += -fPIE -pie
include $(BUILD_EXECUTABLE)
因此,似乎无法使用 android-ndk 构建来解析它们之间具有某种依赖关系的 so 文件。在这种情况下,当我在 android 源代码树下获取项目并构建它时,正确生成了 exe。
我还必须从上面更改 mk 文件,因为下面一切正常。
LOCAL_MODULE := libst
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_TAGS := optional
#32 bit
LOCAL_SRC_FILES_$(TARGET_2ND_ARCH) := lib/$(LOCAL_MODULE)$(LOCAL_MODULE_SUFFIX)
LOCAL_MULTILIB := both
include $(BUILD_MULTI_PREBUILT)
include $(CLEAR_VARS)
我现在已经在这上面浪费了两天时间。解决问题的任何指示都会很有帮助。 我的 Android.mk 文件如下。 问题是 libst.so 应该 link 作为一个系统,所以我的可执行文件 opti. 但是,当我以十六进制打开可执行文件时,它会列出 so 文件 libst.so 的完整路径。而其他依赖的 so 文件则被正确列出。 这最终导致 CANNOT LINK EXECUTABLE 错误,因为正在本地路径中搜索 so 文件 例如
/media/ExtHDD/NIEL/OPTI/TEST/optimize/workspace/android/obj/local/armeabi-v7a/libst.so" 未找到 而不是在里面寻找 /system/lib/libst.所以它应该理想地寻找哪里。
任何指点或建议都会有很大帮助。谢谢。
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
SRC_PATH := ${LOCAL_PATH}/../../..
LOCAL_MODULE := libsmp
LOCAL_SRC_FILES := $(LOCAL_PATH)/lib/libs_beta/armeabi-v7a/libsmp.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_ARM_NEON := true
LOCAL_MODULE := libocv
LOCAL_SRC_FILES := ${LOCAL_PATH}/lib/libs_beta/armeabi-v7a/libOCv.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libst
LOCAL_SRC_FILES := ${LOCAL_PATH}/lib/libs_beta/armeabi-v7a/libst.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := opti
LOCAL_SRC_FILES := \
$(SRC_PATH)/main.cpp \
LOCAL_C_INCLUDES += \
$(SRC_PATH) \
$(SRC_PATH)/util \
$(SRC_PATH)/src \
$(LOCAL_PATH)/lib/include_beta \
$(LOCAL_PATH)/lib/include_beta/opencv \
$(LOCAL_PATH)/lib/include_beta/opencv2
LOCAL_SHARED_LIBRARIES += libc libsmp libocv libst
LOCAL_CFLAGS += -std=c++11 -fopenmp -fpermissive -mfloat-abi=softfp -mfpu=neon -flax-vector-conversions
LOCAL_LDLIBS += -llog -L$(SYSROOT)/usr/lib
LOCAL_CFLAGS += -fPIE
LOCAL_LDFLAGS += -fPIE -pie
include $(BUILD_EXECUTABLE)
因此,似乎无法使用 android-ndk 构建来解析它们之间具有某种依赖关系的 so 文件。在这种情况下,当我在 android 源代码树下获取项目并构建它时,正确生成了 exe。 我还必须从上面更改 mk 文件,因为下面一切正常。
LOCAL_MODULE := libst
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_TAGS := optional
#32 bit
LOCAL_SRC_FILES_$(TARGET_2ND_ARCH) := lib/$(LOCAL_MODULE)$(LOCAL_MODULE_SUFFIX)
LOCAL_MULTILIB := both
include $(BUILD_MULTI_PREBUILT)
include $(CLEAR_VARS)