2017-08-29 165 views
1

我现在已经浪费了两天对此。任何解决问题的指针都会很有帮助。 我的Android.mk文件如下。 问题是,libst.so应链接为一个系统,因此与我的可执行文件opti。 但是,当我打开十六进制可执行文件它列出了so文件libst.so的完整路径。而其他依赖so文件正确列出。 最终导致CAN NOT LINK EXECUTABLE错误,因为在本地路径 (例如,Android EXE链接系统共享对象(.so文件)作为本地共享对象(.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) 
+0

十六进制编辑器显示我的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有一个完整的路径。而它应该像其他文件那样出现 – Niel

+0

这是通过链接libsmp.so的方式命令的。 –

+0

@AlexCohn我不确定你在暗示什么。所有其他文件都正确显示。我在这里剥离了makefile,但即使我删除了libsmp.so,并且只包含了libst.so,我也得到了相同的结果 – Niel

回答

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) 
相关问题