【问题标题】:Android exe linking system shared object (.so file) as local shared object (.so file)Android exe链接系统共享对象(.so文件)作为本地共享对象(.so文件)
【发布时间】:2017-08-29 12:21:41
【问题描述】:

我现在已经为此浪费了两天时间。解决问题的任何指示都会非常有帮助。 我的 Android.mk 文件如下。 问题是 libst.so 应该作为一个系统链接到我的可执行 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.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)

【问题讨论】:

  • 十六进制编辑器显示我的 exe 如下 libsmp.so.libOCv.so./media/ExtHDD/NIEL/OPTI/TEST/optimize/workspace/android/obj/local/armeabi-v7a/libst .so.liblog.so.libstdc++.so.libm.so.libc.so.libdl.so 如您所见,libst.so 有一个完整的路径。而它应该看起来像其他so文件
  • 这是由 libsmp.so 的链接方式决定的。
  • @AlexCohn 我不确定您的建议是什么。所有其他so文件都正确显示。我已经在这里剥离了 makefile,但即使我删除 libsmp.so 并只包含 libst.so 我得到相同的结果
  • 对不起,这是我的错字。我的意思是,完整路径是预构建的 libst.so 链接方式的结果。

标签: android makefile android-ndk shared-libraries


【解决方案1】:

因此,似乎无法使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    • 2011-12-17
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多