Undefined reference to android log print

неопределенная ссылка на `__android_log_print ‘

Что не так с моим make файлом?

Попробуйте в своем Android.mk файле сделать следующее:

Вам нужно добавить

Если вы используете Android Studio и gradle, он игнорирует Android.mk. Добавьте это в свой файл build.gradle:

Для Android Studio 2.2 и tools.build:gradle:2.2.0 с помощью CMake добавьте или отредактируйте строку в CMakeLists.txt:

Это подключает библиотеку журналов к вашей.

Если вы обновляетесь до Android Studio 2.1, приведенные выше ответы не работают, необходимо использовать ldLibs.add () для загрузки библиотеки, как показано ниже:

Мы можем связать общую библиотеку в Android 3 способами. В следующих трех случаях указанные строки следует добавить в Android.mk

Итак, вот три способа.

По какой-то причине, если 1 не работает (у меня это не сработало), вы можете попробовать следующие два способа

Конечно, вам также необходимо включить #include в ваш C / H файл.

Если проект, над которым вы работаете, имеет следующие характеристики, которые отличаются от других «стандартных» ответов:

  • Не использую Android Studio
  • Без использования gradle и встроенного CMake
  • Android.mk или Application.mk не используются для сборки
  • Использование CMake и инструментальной цепочки напрямую (возможно, ваш проект основан на Qt и не использует QtCreator)

Следующее использование target_link_libraries делает это:

Будучи TARGET_NAME имя цели , чтобы построить (Поставив его перед с add_library или add_executable ).

find_library не менее важно, а также правильно настроить цепочку инструментов (используйте цепочку инструментов, предоставляемую Android SDK, ANDROID_SDK_HOME/cmake/ /android.toolchain.cmake чтобы она настраивала, CMAKE_SYSROOT которая используется find_ командами).

Да, вам нужно добавить: LOCAL_LDLIBS := -llog как указано в других ответах / комментариях, однако в исходном вопросе не указывалось, использует ли он библиотеку jni как: LOCAL_JNI_SHARED_LIBRARIES или как LOCAL_REQUIRED_MODULES .

Я могу точно сказать, что он использовал его как: LOCAL_REQUIRED_MODULES из-за LOCAL_EXPORT_LDLIBS := -llog за вопроса в вопросе . если это не было добавлено после редактирования.

Если вы используете LOCAL_REQUIRED_MODULES разделяемую библиотеку, она устанавливается в / system / lib вместо apk, потому что это обязательный модуль. Поэтому вам нужно будет добавить, LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog а не просто LOCAL_LDLIBS := -llog так, чтобы, когда система сборки строит и связывает общую библиотеку jni, у нее были -llog определения в правильном месте, доступные для сборки $OUT/root/system/lib . В противном случае вы продолжите получать тот же ответ, даже если добавите только LOCAL_LDLIBS := -llog .

Итак, те, кто прокомментировал, что -L это не нужно, а другой ответ был правильным, на самом деле были неправильными в этой ситуации.

Источник

Undefined ссылка на `__android_log_print ‘

Что случилось с моим файлом make?

ОТВЕТЫ

Ответ 1

Попробуйте следующее в файле Android.mk :

Ответ 2

Вам нужно добавить

Ответ 3

Если вы используете Android Studio и gradle, он игнорирует Android.mk. Добавьте это в свой файл build.gradle:

Ответ 4

Если вы перейдете на Android Studio 2.1, ответы выше не работают, вам нужно использовать ldLibs.add() для загрузки lib, как показано ниже:

Ответ 5

Для Android Studio 2.2 и tools.build: gradle:2.2.0, используя CMake добавить или изменить строку в CMakeLists.txt:

Это соединение библиотеки журналов с вашим.

Ответ 6

Мы можем связать общую библиотеку в Android тремя способами. В ниже 3 случаях указанные строки следует добавить в Android.mk

Итак, вот три способа.

По какой-то причине, если 1 не работает (это не сработало для меня), вы можете попробовать менее двух способов

Конечно, вам также нужно включить #include в ваш файл C/H.

Ответ 7

Если вы используете новую интеграцию NDK Gradle в Android Studio 1.3, вам нужно добавить ldLibs = [ «android», «log» ] к вашим параметрам android.ndk — Stephen Kaiser Sep 24 at 4:20

используйте ldLibs.addAll([«android», «log»]) для экспериментального плагина

Ответ 8

Ответ 9

Да, вам нужно добавить: LOCAL_LDLIBS := -llog , как указывали другие ответы/комментарии, однако исходный вопрос не указал, использует ли он библиотеку jni как: LOCAL_JNI_SHARED_LIBRARIES или как LOCAL_REQUIRED_MODULES .

Читайте также:  Как запретить обновление android auto

Я могу очень точно сказать, что он использовал его как: LOCAL_REQUIRED_MODULES из-за LOCAL_EXPORT_LDLIBS := -llog в вопросе. если это не было добавлено после редактирования.

Если вы используете LOCAL_REQUIRED_MODULES , общая библиотека устанавливается в /system/lib, а не в apk, потому что это необходимый модуль. Поэтому вам нужно добавить LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog вместо просто LOCAL_LDLIBS := -llog , чтобы при сборке и компоновке jni-разделяемой библиотеки она имела определения -llog в правильном месте, доступное для построения в $OUT/root/system/lib . В противном случае вы продолжите получать тот же ответ, даже если вы добавите LOCAL_LDLIBS := -llog .

Итак, те, кто прокомментировал, что -L не нужны, и другой ответ был прав, в действительности они были неверными.

Ответ 10

Это помогло мне:

Ответ 11

В студии Android версии 2.2 и выше встроенная поддержка CPP при создании нового проекта. Кроме того, liblog.so включен по умолчанию. Ничего не нужно делать, кроме заголовочного файла (android/log.h).

Приложение Checkout/CMakeLists.txt, созданное студией при создании нового проекта студии Android. Мы видим, что блок find_library() и блок target_link_libraries() для loglib уже присутствуют.

Также обратите внимание на синтаксис функции. Это должно быть:

__ android_log_print (int priority, const char * tag, const char * fmt. );

В моем случае я оставил параметр тега и в итоге потратил 3 дня на то, чтобы понять его.

Ответ 12

Если проект, над которым вы работаете, имеет следующие характеристики, которые отличаются от других «стандартных» ответов:

  • Не использовать Android Studio
  • Не использовать gradle и встроенный CMake
  • Никаких Android.mk или Application.mk вообще не использовать для сборки
  • Использование CMake и инструментальной привязки напрямую (возможно, ваш проект основан на Qt и без использования QtCreator)

Будучи TARGET_NAME именем целевой сборки (предварительно настроив ее с помощью add_library или add_executable ).

Источник

undefined reference to `__android_log_print’

Posted by: admin November 28, 2017 Leave a comment

What is wrong with my make file?

Try the following in your Android.mk file:

You need to add

If you use Android Studio and gradle, it ignores Android.mk. Add this to your build.gradle file:

If you upgrade to Android Studio 2.1, above answers do not work, need use ldLibs.add() to load the lib as below:

For Android Studio 2.2 and tools.build:gradle:2.2.0 using CMake add or edit row in CMakeLists.txt:

Thats connecting log library to yours.

We can link a shared library in Android in 3 ways.
In below 3 cases, the lines mentioned should be added in Android.mk

So here are the three ways.

For some reason if 1 doesnt work(it did not work for me), You can try below 2 ways

Of course you also need to include #include in your C/H file.

If using the new Gradle NDK integration in Android Studio 1.3, you need to add ldLibs = [“android”, “log”] to your android.ndk options – Stephen Kaiser Sep 24 at 4:20

use ldLibs.addAll([«android», «log»]) for the experimental plugin

Yes, you do need to add: LOCAL_LDLIBS := -llog as the other answers/comments have specified, however the original question did not specify if he use the jni library as: LOCAL_JNI_SHARED_LIBRARIES or as LOCAL_REQUIRED_MODULES .

I can pretty much say for sure that he has it used it as: LOCAL_REQUIRED_MODULES because of the LOCAL_EXPORT_LDLIBS := -llog in the question… unless that was added after an edit.

If you use LOCAL_REQUIRED_MODULES the shared library is installed in /system/lib instead of into the apk, because it is a required module. Therefore you will need to add LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog instead of just LOCAL_LDLIBS := -llog so that when the build system is building & linking the jni shared library, it will have the -llog definitions in the correct place, available to be built under $OUT/root/system/lib . Otherwise you will continue to get the same answer, even if you only add LOCAL_LDLIBS := -llog .

Читайте также:  Вибрация при нажатии для андроид

So, those who commented that the -L is not needed, and the other answer was correct, they were actually incorrect in this situation.

This helped for me:

In the android studio version 2.2 and higher, there is inbuilt support for CPP when you create a new project. Also, the liblog.so is included by default. Nothing to be done apart from including the header file (android/log.h).

Checkout app/CMakeLists.txt that is created by the studio when we create new android studio project. We can see that the find_library() block and target_link_libraries() block for loglib are already present.

Also, pay attention towards the function syntax. It should be:

__android_log_print (int priority, const char *tag, const char *fmt,…);

In my case, I had left out tag parameter and ended up spending good 3 days in figuring it out.

android – How do I display a CalendarView in an AlertDialog?

Questions: I’m trying to display the CalendarView in an Alert Dialog, but all that shows up is the month/year and the days of the week. These are the contents of the layout file:

How do I convert a PSD design to Android xml?

Questions: Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it’s on-topic for Stack Over.

Источник

example — undefined reference to `__android_log_print’ cmake

undefined reference to `__android_log_print’ (8)

What is wrong with my make file?

For Android Studio 2.2 and tools.build:gradle:2.2.0 using CMake add or edit row in CMakeLists.txt:

Thats connecting log library to yours.

If you use Android Studio and gradle, it ignores Android.mk. Add this to your build.gradle file:

In case the project you are working on has the following characteristics that differ from other ‘standard’ answers:

  • Not using Android Studio
  • Not using gradle and the integrated CMake
  • No Android.mk or Application.mk used at all for build
  • Using CMake and the toolchain directly (maybe your project is Qt based and without using QtCreator neither)

The following target_link_libraries usage makes it:

Being TARGET_NAME the name of the target to build (having set it up before with add_library or add_executable ).

find_library is equally important as well as setting up the toolchain properly (use the toolchain provided by Android SDK at ANDROID_SDK_HOME/cmake/ /android.toolchain.cmake so it sets up CMAKE_SYSROOT which is used by find_ commands).

In the android studio version 2.2 and higher, there is inbuilt support for CPP when you create a new project. Also, the liblog.so is included by default. Nothing to be done apart from including the header file (android/log.h).

Checkout app/CMakeLists.txt that is created by the studio when we create new android studio project. We can see that the find_library() block and target_link_libraries() block for loglib are already present.

Also, pay attention towards the function syntax. It should be:

__android_log_print (int priority, const char *tag, const char *fmt. );

In my case, I had left out tag parameter and ended up spending good 3 days in figuring it out.

This helped for me:

We can link a shared library in Android in 3 ways. In below 3 cases, the lines mentioned should be added in Android.mk

So here are the three ways.

For some reason if 1 doesnt work(it did not work for me), You can try below 2 ways

Of course you also need to include #include in your C/H file.

Yes, you do need to add: LOCAL_LDLIBS := -llog as the other answers/comments have specified, however the original question did not specify if he use the jni library as: LOCAL_JNI_SHARED_LIBRARIES or as LOCAL_REQUIRED_MODULES .

I can pretty much say for sure that he has it used it as: LOCAL_REQUIRED_MODULES because of the LOCAL_EXPORT_LDLIBS := -llog in the question. unless that was added after an edit.

If you use LOCAL_REQUIRED_MODULES the shared library is installed in /system/lib instead of into the apk, because it is a required module. Therefore you will need to add LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog instead of just LOCAL_LDLIBS := -llog so that when the build system is building & linking the jni shared library, it will have the -llog definitions in the correct place, available to be built under $OUT/root/system/lib . Otherwise you will continue to get the same answer, even if you only add LOCAL_LDLIBS := -llog .

Читайте также:  Пай пасс для андроид

So, those who commented that the -L is not needed, and the other answer was correct, they were actually incorrect in this situation.

Источник

undefined reference to `__android_log_print’

November 2018

71.6k time

What is wrong with my make file?

12 answers

Вам нужно добавить

Попробуйте следующее в вашем Android.mk файле:

Это помогло мне:

В случае, если проект вы работаете, имеют следующие характеристики, которые отличаются от других «стандартных» ответов:

  • Не используя Android Studio
  • Не используя Gradle и интегрированный CMake
  • Нет Android.mk или Application.mk не используется вообще для сборки
  • Использование CMake и набора инструментов непосредственно (возможно, ваш проект Qt на основе и без использования не QtCreator ни)

Следующий target_link_libraries использование делает:

Будучи TARGET_NAME имя цели , чтобы построить (поставив его перед с add_library или add_executable ).

find_library Не менее важно, а также создание набора инструментов (используйте предоставленный набор инструментов Android SDK на ANDROID_SDK_HOME/cmake/ /android.toolchain.cmake так он устанавливает , CMAKE_SYSROOT который используется find_ командами).

Мы можем связать общую библиотеку в Android 3 способами. В ниже 3 случаев линия, упомянутая должна быть добавлена ​​в Android.mk

Так вот три способа.

По какой-то причине, если 1 не работает (она не работает для меня), Вы можете попробовать ниже 2 способами

Конечно , вы также должны включать #include в файл C / H.

В Android Studio версии 2.2 и выше, есть встроенная поддержка СРР при создании нового проекта. Кроме того, liblog.so включен по умолчанию. Ничего не поделаешь, кроме включения файла заголовка (Android / log.h).

Checkout приложение / CMakeLists.txt, который создается студией, когда мы создаем новый андроид студийный проект. Мы можем видеть, что find_library () блок и target_link_libraries () блок для loglib уже присутствуют.

Кроме того, обратите внимание на синтаксис функции. Так должно быть:

__android_log_print (интермедиат приоритет, Const символ * тег, Const символ * FMT, . );

В моем случае, я оставил из параметров тега и в конечном итоге расходы хорошие 3 дня в выяснении его.

Для Android Studio 2.2 и tools.build:gradle:2.2.0 с помощью CMake добавить или изменить строку в CMakeLists.txt:

То подключение библиотеки журнала к вашему.

При использовании новой интеграции Gradle NDK в Android Studio 1.3, вам нужно добавить ldLibs = [ «андроида», «Журнал»] в параметры android.ndk — Stephen Kaiser 24 сен в 4:20

использовать ldLibs.addAll([«android», «log»]) для экспериментального плагина

Если вы используете Android Studio и Gradle, он игнорирует Android.mk. Добавьте к этому файлу build.gradle:

При обновлении до Android Studio 2.1, выше ответы не работают, необходимо использовать ldLibs.add () для загрузки LIB, как показано ниже:

Да, вам нужно добавить: LOCAL_LDLIBS := -llog как и другие ответы / уточнили комментарии, однако исходный вопрос не указать , если он использовать JNI библиотеку как: LOCAL_JNI_SHARED_LIBRARIES или LOCAL_REQUIRED_MODULES .

Я могу очень многое сказать наверняка , что он его использовал его как: LOCAL_REQUIRED_MODULES из-за LOCAL_EXPORT_LDLIBS := -llog в этом вопросе . если это не было добавлено после редактирования.

При использовании LOCAL_REQUIRED_MODULES разделяемой библиотеки установлен в / системы / Lib вместо в APK, потому что это необходимый модуль. Поэтому вам нужно будет добавить LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog вместо того , чтобы просто LOCAL_LDLIBS := -llog так , что , когда система сборки строит и связывая JNI разделяемой библиотеки, она будет иметь -llog определение в правильном месте, доступное быть построено в соответствии $OUT/root/system/lib . В противном случае вы будете продолжать получать тот же самый ответ, даже если вы только добавить LOCAL_LDLIBS := -llog .

Таким образом, те , кто отметил , что -L не нужно, а другой ответ был правильным, они были на самом деле неправильно в этой ситуации.

Источник

Оцените статью