2017-08-29 4 views
1

J'ai maintenant perdu deux jours à ce sujet. Tout pointeur dans la résolution du problème serait vraiment utile. Mon fichier Android.mk est comme ci-dessous. Le problème est que libst.so devrait être lié en tant que système avec mon opti exécutable. Mais quand j'ouvre l'execuatble dans un Hex, il liste le chemin complet vers le fichier so libst.so. Alors que les autres fichiers dépendants sont répertoriés correctement. Il en résulte que l'erreur CAN NOT LINK EXECUTABLE ne peut finalement pas être effectuée car le fichier est recherché dans le chemin local par ex.Objet partagé du système de liaison exe Android (fichier .so) en tant qu'objet partagé local (fichier .so)

/media/ExtHDD/NIEL/OPTI/TEST/optimize/workspace/android/obj/local/armeabi-v7a/libst.so » non trouvé plutôt que de chercher à l'intérieur /system/lib/libst.so où il devrait idéalement chercher.

les pointeurs ou suggestions seront d'une grande aide. Merci.

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

L'éditeur Hex montre mon exe comme suit 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 Comme vous pouvez le voir, libst.so a un chemin complet. alors qu'il devrait apparaître comme les autres fichiers donc – Niel

+0

Ceci est commandé par la façon dont libsmp.so était lié. –

+0

@AlexCohn Je ne suis pas sûr de ce que vous suggérez. Tous les autres fichiers apparaissent correctement. J'ai démonté le makefile ici mais même si je supprime libsmp.so et j'inclus juste libst.so j'obtiens le même résultat – Niel

Répondre

0

Ainsi, il semble que si les fichiers qui ont une certaine dépendance entre eux ne peut être résolu en utilisant android-NDK Dans ce cas, lorsque j'ai obtenu le projet sous l'arborescence des sources android et l'ai construit, l'exe a été correctement généré J'ai également dû changer le fichier mk de ce qui précède car tout ci-dessous a bien fonctionné.

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)