AVERTISSEMENT: .../Android.mk: non-système de bibliothèques dans l'éditeur de liens drapeaux
Je suis de cet avertissement lors de l'exécution de $ANDROID_NDK_ROOT/ndk-build
. Le Android.mk
est ci-dessous.
$ $ANDROID_NDK_ROOT/ndk-build
WARNING:/Users/jwalton/Android-CryptoPP/jni/Android.mk:prng:
non-system libraries in linker flags: -lcryptopp -lstlport_shared
This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES
or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the
current module
...
Cependant, lorsque je suis les instructions et supprimer -lcryptopp -lstlport_shared
de LOCAL_LDLIBS
, puis je obtenir le lien d'erreurs liées à des symboles de libstlport_shared.so
. Un échantillon des erreurs sont affichées ci-dessous après la Android.mk
fichier.
Comment, exactement, ne ndk-build
voulez Android.mk
mettre en place?
Pourquoi dois-je ajouter $(STLPORT_INCL)
à LOCAL_C_INCLUDES
, et $(STLPORT_LIB)
à LOCAL_LDFLAGS
? Pourquoi ne APP_STL := stlport_shared
pas installation de la STL correctement hors de la boîte?
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
TARGET_ARCH_ABI := armeabi
TARGET_ABI := android-9-armeabi
CRYPTOPP_INCL := /usr/local/cryptopp-android-9/include
CRYPTOPP_LIB := /usr/local/cryptopp-android-9/lib
STLPORT_INCL := /opt/android-ndk-r9/sources/cxx-stl/stlport/stlport
STLPORT_LIB := /opt/android-ndk-r9/sources/cxx-stl/stlport/libs/armeabi
APP_STL := stlport_shared
APP_MODULES := stlport_shared cryptopp
LOCAL_CPP_FEATURES := rtti exceptions
LOCAL_C_INCLUDES := $(CRYPTOPP_INCL) $(CRYPTOPP_INCL)/cryptopp $(STLPORT_INCL)
LOCAL_LDFLAGS := -L $(CRYPTOPP_LIB) -L $(STLPORT_LIB)
LOCAL_LDLIBS := -lcryptopp -lstlport_shared -llog -landroid
# LOCAL_LDLIBS := -llog -landroid
# LOCAL_SHARED_LIBRARIES := -lcryptopp -lstlport_shared
LOCAL_MODULE := prng
LOCAL_SRC_FILES := libprng.cpp
include $(BUILD_SHARED_LIBRARY)
Voici un exemple de l'erreur en essayant de suivre le conseil en retirant mon bibliothèques locales de LOCAL_LDLIBS
:
$ $ANDROID_NDK_ROOT/ndk-build
Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 9 in /Users/jwalton/Android-CryptoPP/AndroidManifest.xml
Gdbserver : [arm-linux-androideabi-4.6] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile++ thumb : prng <= libprng.cpp
SharedLibrary : libprng.so
/opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /Users/jwalton/Android-CryptoPP/obj/local/armeabi/objs-debug/prng/libprng.o: in function std::__node_alloc::allocate(unsigned int&):/opt/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_alloc.h:158: error: undefined reference to 'std::__node_alloc::_M_allocate(unsigned int&)'
/opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /Users/jwalton/Android-CryptoPP/obj/local/armeabi/objs-debug/prng/libprng.o: in function std::__node_alloc::deallocate(void*, unsigned int):/opt/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_alloc.h:161: error: undefined reference to 'std::__node_alloc::_M_deallocate(void*, unsigned int)'
/opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: /Users/jwalton/Android-CryptoPP/obj/local/armeabi/objs-debug/prng/libprng.o: in function std::ios_base::_M_check_exception_mask():/opt/android-ndk-r9/sources/cxx-stl/stlport/stlport/stl/_ios_base.h:193: error: undefined reference to 'std::ios_base::_M_throw_failure()'
...
Vous devez vous connecter pour publier un commentaire.
J'interprète le "non-système de bibliothèques dans l'éditeur de liens drapeaux" message comme un avertissement que vous n'utilisez pas le système par défaut de bibliothèques (en
usr/lib
) qui peut être parfaitement bien, mais qui pourrait également conduire à des erreurs (incompatibilité entre les différentes bibliothèques de la version). Si cet avertissement bugs vous est entièrement à vous.Ensuite, à propos de la façon dont vous avez essayé de le résoudre, je pense que vous utilisez à tort la
LOCAL_SHARED_LIBRARIES
variable du NDK.Je colle ici un exemple de l'un de mes
Android.mk
fichier qui utilise AssimpComme vous pouvez le voir, je déclare une
LOCAL_MODULE
avec un nom personnalisé, mis en place un peu de variables et de l'inclure laPREBUILT_STATIC_LIBRARY
script qui raconte le NDK pour utiliser cette lib.Puis dans
LOCAL_STATIC_LIBRARIES
je liste les bibliothèques-je utiliser avec leur nom de module, pas comme si c'était un linker drapeau comme vous le faites ici.Dans votre cas, je crois que vous devriez faire ce qui suit, par exemple pour la stl
Je pense que cela devrait le faire. Bien sûr, répétez le processus pour chaque libs qui pose problème, et n'oubliez pas le
include(CLEAR_VARS)
entre chaque lib spécification.LOCAL_EXPORT_C_INCLUDES := <path to stlport includes>
. Android fournit la merde de la bibliothèque. Ils fournissent une fk d up système de construction. Le st doit être inclus comme--sysroot
. Au lieu de cela, ils torturent les développeurs avec elle. Et ils se cachent la sortie de sorte que vous ne pouvez même pas voir les résultats de l'expérimentation tout en essayant d'obtenir le s**t de travail.APP_STL=gnustl_shared
dans monApplication.mk
...../libs/armeabi
dossier.V=1
paramètrendk-build