- неопределенная ссылка на `__android_log_print ‘
- Undefined ссылка на `__android_log_print ‘
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- undefined reference to `__android_log_print’
- Related Posts
- android – How do I display a CalendarView in an AlertDialog?
- How do I convert a PSD design to Android xml?
- example — undefined reference to `__android_log_print’ cmake
- undefined reference to `__android_log_print’ (8)
- undefined reference to `__android_log_print’
- 12 answers
неопределенная ссылка на `__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 .
Я могу очень точно сказать, что он использовал его как: 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.
Related Posts
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 не нужно, а другой ответ был правильным, они были на самом деле неправильно в этой ситуации.
Источник