2017-08-29 99 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)