undefined reference to 'android log print'
Co jest nie tak z moim plikiem make?
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo.c
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
Foo.c
#include <string.h>
#include <jni.h>
#include <android/log.h>
#define LOG_TAG "foo"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
void test() {
LOGI("test");
}
NDK-build
foo.c:9: undefined reference to `__android_log_print'
15 answers
Spróbuj w pliku Android.mk
:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-04 12:57:25
Musisz dodać
LOCAL_LDLIBS := -llog
To Android.mk
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-31 05:46:33
Jeśli używasz Android Studio i gradle, ignoruje Android.mk dodaj to do swojej budowy.plik gradle:
android {
defaultConfig {
ndk {
moduleName "your_module_name"
ldLibs "log"
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-10 17:41:47
Dla Android Studio 2.2 i narzędzi.Budowa: gradle: 2.2.0 using CMake Dodaj lub edytuj wiersz w CMakeLists.txt:
target_link_libraries(<your_library_name>
android
log)
To łączy bibliotekę logów z Twoją.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-09 17:22:08
Jeśli uaktualnić do Android Studio 2.1, powyższe odpowiedzi nie działają, trzeba użyć ldLibs.Dodaj (), aby załadować lib jak poniżej:
android.ndk {
moduleName = "[the_module_name]"
ldLibs.addAll(['android', 'log'])
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-05 16:49:13
Możemy połączyć dzieloną bibliotekę w Androidzie na 3 sposoby.
W poniższych 3 przypadkach wymienione wiersze należy dodać w Android.mk
1. LOCAL_LDLIBS way
LOCAL_LDLIBS := -llog
Z jakiegoś powodu, jeśli 1 nie działa (nie działa dla mnie), możesz spróbować poniżej 2 sposoby
2. LOCAL_LDFLAGS way
LOCAL_LDFLAGS := -llog
3. LOCAL_SHARED_LIBRARIES way
LOCAL_SHARED_LIBRARIES += liblog
Oczywiście musisz również dołączyć #include <android/log.h>
do pliku C/h.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-09 06:16:23
W przypadku, gdy projekt, nad którym pracujesz, ma następujące cechy, które różnią się od innych "standardowych" odpowiedzi:
- nie używam Android Studio
- nie używaj gradle 'a i zintegrowanego CMake' a
- nie Android.mk lub Application.mk używane w ogóle do budowy
- Korzystanie bezpośrednio z CMake i toolchaina (być może twój projekt jest oparty na Qt i nie używa Qtcreatora)
Następujące target_link_libraries użycie sprawia, że it:
find_library(ANDROID_LOG_LIB log)
target_link_libraries(${TARGET_NAME} ${ANDROID_LOG_LIB})
Jest TARGET_NAME
nazwą celu do zbudowania (po skonfigurowaniu go wcześniej z add_library
lub add_executable
).
find_library
jest równie ważne, jak prawidłowe skonfigurowanie toolchain (użyj toolchain dostarczonego przez Android SDK w ANDROID_SDK_HOME/cmake/<version>/android.toolchain.cmake
, aby ustawić CMAKE_SYSROOT
, który jest używany przez find_
poleceń).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 00:05:30
Tak, musisz dodać: LOCAL_LDLIBS := -llog
tak jak inne odpowiedzi/komentarze zostały określone, jednak oryginalne pytanie nie określiło, czy używa biblioteki jni jako: LOCAL_JNI_SHARED_LIBRARIES
czy jako LOCAL_REQUIRED_MODULES
.
Mogę powiedzieć na pewno, że użył go jako: LOCAL_REQUIRED_MODULES
ze względu na LOCAL_EXPORT_LDLIBS := -llog
w pytaniu... chyba, że zostało dodane po edycji.
Jeśli używasz LOCAL_REQUIRED_MODULES
biblioteka współdzielona jest zainstalowana w /system/lib zamiast w apk, ponieważ jest to wymagany moduł. Dlatego będziesz musiał dodaj LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
zamiast tylko LOCAL_LDLIBS := -llog
, Aby gdy system budowania buduje i łączy bibliotekę współdzieloną jni, będzie miał definicje -llog
we właściwym miejscu, dostępne do zbudowania pod $OUT/root/system/lib
. W przeciwnym razie otrzymasz tę samą odpowiedź, nawet jeśli dodasz tylko LOCAL_LDLIBS := -llog
.
Więc ci, którzy skomentowali, że -L
nie jest potrzebny, a druga odpowiedź była poprawna, byli rzeczywiście niepoprawni w tej sytuacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-05 21:17:15
W miejsce
Jeśli używasz nowej integracji Gradle NDK w Android Studio 1.3, musisz dodać ldLibs = ["android"," log"] do swojego Androida.opcje ndk-Stephen Kaiser Sep 24 at 4:20
Użyj ldLibs.addAll(["android", "log"])
dla eksperymentalnej Wtyczki
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-27 01:40:00
Dodaj
LOCAL_SHARED_LIBRARIES:= \
libbinder \
liblog \
To Android.mk
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-15 08:24:14
To mi pomogło:
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := nativeDemo
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-07 12:12:48
W android studio w wersji 2.2 i wyższej, istnieje wbudowane wsparcie dla CPP podczas tworzenia nowego projektu. Ponadto, liblog.so jest domyślnie dołączony. Nic nie można zrobić poza włączeniem pliku nagłówkowego (android / log.h).
Checkout app / CMakeLists.txt, który jest tworzony przez studio, gdy tworzymy nowy projekt Android studio. Widzimy, że blok find_library() i target_link_libraries () dla loglib są już obecne.
Zwróć również uwagę na składnia funkcji. Powinno być:
__android_log_print (int priority ,const char * tag, const char * fmt,...);
W moim przypadku pominąłem parametr tag i spędziłem dobre 3 dni na wymyślaniu tego.
Więcej o CMake: Dodaj kod C i C++ do swojego projektu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-28 04:21:55
-DCMAKE_CXX_FLAGS=" - llog " pomaga mi
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-17 09:47:08
Dodaj
LOCAL_SHARED_LIBRARIES:= liblog
na Android.mk może rozwiązać mój problem.
Jest to spowodowane tym, że __android_log_print
jest zdefiniowane w libLog
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-03 07:19:36
Do budowania z Androidem.bp, postępuj zgodnie z poniższym rozwiązaniem:
W tym -android_log_print jest zdefiniowany w NDK, więc do tego jest już dostępna biblioteka. Użyj biblioteki "liblog " używając znacznika shared_libs, skorzystaj z poniższego kodu:
target: {
android: {
cppflags: [
"-g",
"-DUSE_LIBLOG",
],
shared_libs: ["liblog"], // can use other dependency if required.
},
darwin: {
enabled: false,
},
},
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-31 12:56:58