2013-10-05 12 views
6

Mam projekt Androida napisany w C++ i mam problem z połączeniem. Kod jest umieszczany w niektórych statycznych bibliotekach, które powinny być ze sobą połączone.Android: Jak poprawnie połączyć moje własne biblioteki statyczne?

Znalazłem wiele pytań i odpowiedzi w Internecie na ten temat i większość z nich sugeruje umieszczenie moich bibliotek na LOCAL_STATIC_LIBRARIES w pliku Android.mk. Ale, jeśli to zrobię, stwierdziłem, że treść LOCAL_STATIC_LIBRARIES jest po prostu ignorowana: moje biblioteki nie są połączone, a dodanie tutaj dowolnego fikcyjnego tekstu nie generuje żadnego błędu ani komunikatu ostrzegawczego.

Próbowałem to w ten sposób:

LOCAL_STATIC_LIBRARIES := MyLib.a 

lub z pełną ścieżką:

LOCAL_STATIC_LIBRARIES := $(LOCAL_PATH)/MyLib.a 

żaden z nich nie pracował.

Jeśli umieściłem moje biblioteki statyczne na LOCAL_LDLIBS, to jest połączone, ale otrzymałem komunikat ostrzegawczy o bibliotekach niesystemowych i prawdopodobnie kompilacja będzie niepoprawna.

Zawartość moim pliku Android.mk jest:

LOCAL_LDLIBS := $(LOCAL_PATH)/MyLib.a ... 

i mam komunikat:

Android NDK: WARNING:jni/Android.mk:myapp: non-system libraries in linker flags: jni/MyLib.a  
Android NDK:  This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES  
Android NDK:  or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the  
Android NDK:  current module  

nie mogłem znaleźć sposobu korzystania LOCAL_STATIC_LIBRARIES właściwą drogę, proszę mi pomóc!

Mam Android NDK-R9 i Android-x86 sdk_r22.2.1 na openSUSE i stosując target = Android 18

+0

cześć nie można rozwiązać problemu ?? bo ja też mam takie samo. Jeśli możesz mi pomóc /// –

Odpowiedz

1

Najprawdopodobniej problem leży w tym dajesz rozszerzenie biblioteki:

LOCAL_STATIC_LIBRARIES := MyLib.a 

myślę, że powinien on być zapisany jako:

LOCAL_STATIC_LIBRARIES := MyLib 
5

Zobacz JBL odpowiedź here.

Zmienna LOCAL_STATIC_LIBRARIES nie działa w ten sposób. Najpierw trzeba sekcję, która określa biblioteka chcesz dołączyć:

include $(CLEAR_VARS) 
LOCAL_PATH = . 
LOCAL_MODULE := curl 
LOCAL_EXPORT_C_INCLUDES := ../curl/include 
LOCAL_SRC_FILES := ../curl/lib/libcurl.a 
include $(PREBUILT_STATIC_LIBRARY) 

Następnie można umieścić go przy użyciu

include $(CLEAR_VARS) 
LOCAL_MODULE = mylib 
CFLAGS = ... 
... 
LOCAL_STATIC_LIBRARIES = curl 
include $(BUILD_STATIC_LIBRARY) 
Powiązane problemy