Android exe链接系统共享对象(.so文件)作为本地共享对象(.so文件)

时间:2017-08-29 12:21:42

标签: android makefile android-ndk shared-libraries

我现在浪费了两天时间。任何解决问题的指针都会有所帮助。 我的Android.mk文件如下。 问题是libst.so应该作为一个系统链接到我的可执行文件opti。 但是当我用Hex打开执行程序时,它会列出so文件libst.so的完整路径。而其他依赖的so文件正确列出。 由于在本地路径中搜索了so文件,因此最终导致CAN NOT LINK EXECUTABLE错误 例如

/media/ExtHDD/NIEL/OPTI/TEST/optimize/workspace/android/obj/local/armeabi-v7a/libst.so“未找到 而不是寻找内心 /system/lib/libst.so理想情况下应该寻找。

任何指针或建议都会有很大帮助。谢谢。

  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)

1 个答案:

答案 0 :(得分:0)

因此,似乎使用android-ndk build无法解析它们之间存在某种依赖关系的文件。在这种情况下,当我在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)