【发布时间】: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