Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
znseday
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 505
1

Подключить стороннюю NDK-библиотеку к своему NDK-проекту

20.07.2017, 19:37. Просмотров 977. Ответов 6
Метки нет (Все метки)

Пытаюсь подключить к своему (на самом деле не совсем своему) NDK-проекту стороннюю библиотеку libpng (http://www.libpng.org). Содержимое библиотеки скопировал в ${ANDROID_NDK}/sources/libpng. Отредактировал CMakeLists.txt-файл основного проекта согласно официальной документации, получилось следующее:
cmake_minimum_required(VERSION 3.4.1)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

# build native_app_glue as a static lib
add_library(native_app_glue STATIC
${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c)

set(CMAKE_SHARED_LINKER_FLAGS
"${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")

add_library( # Sets the name of the library.
myblaster
# Sets the library as a sharend library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/MyLog.cpp
src/main/cpp/MyEventLoopClass.cpp
src/main/cpp/MyMain.cpp
src/main/cpp/MyDroidBlaster.cpp
src/main/cpp/MyGraphicsManagerClass.cpp
src/main/cpp/MyShip.cpp
src/main/cpp/MyTimeManagerClass.cpp
src/main/cpp/MyPhysicsManagerClass.cpp
src/main/cpp/MyAsteroidClass.cpp
src/main/cpp/MyResourceClass.cpp)

# Sets lib_src_DIR to the path of the target CMake project.
set( lib_src_DIR ${ANDROID_NDK}/sources/libpng )

# Sets lib_build_DIR to the path of the desired output directory.
set( lib_build_DIR ${ANDROID_NDK}/sources/libpng/outputs )
file(MAKE_DIRECTORY ${lib_build_DIR})

# Adds the CMakeLists.txt file located in the specified directory
# as a build dependency.
add_subdirectory( # Specifies the directory of the CMakeLists.txt file.
${lib_src_DIR}
# Specifies the directory for the build outputs.
${lib_build_DIR} )

# Adds the output of the additional CMake build as a prebuilt static
# library and names it lib_gmath.
add_library( lib_gmath STATIC IMPORTED )

set_target_properties( lib_gmath PROPERTIES IMPORTED_LOCATION
${lib_build_DIR}/${ANDROID_ABI}/lib_gmath.a )

include_directories( ${lib_src_DIR} )

find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )

target_include_directories(myblaster PRIVATE
${ANDROID_NDK}/sources/android/native_app_glue)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
myblaster
native_app_glue
android
EGL
GLESv2
lib_gmath
log
# Links the target library to the log library
# included in the NDK.
${log-lib} )
Синхронизация проекта происходит успешно, но при сборке получаю ошибку:
Error:error: 'C:/Users/User/AppData/Local/Android/sdk/ndk-bundle/sources/libpng/outputs/mips64/lib_gmath.a', needed by '../../../../build/intermediates/cmake/debug/obj/mips64/libmyblaster.so', missing and no known rule to make it
Понимаю, что что-то не так с путями. Подскажите, пожалуйста, с чем это связано? Может требуются еще как-либо корректировки в Gradle-файле?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2017, 19:37
Ответы с готовыми решениями:

Подключить NDK
(моя 101я попытка начать работать с NDK) Чуть сдвинулся, но не хватает теории... 1) Скачал...

AS и Ndk
Здравствуйте На официальном сайте в разделе ndk почему- то описывается eclipse Предполагается...

Android NDK
Здравствуйте. Хотелось бы написать пару программок на андроид, но джаву вообще не знаю. Нагуглил,...

NDK и SDK
есть класс на яве который использует массив, который с течением времени увеличивается ( то есть...

Android NDK
Здравствуйте, форумчане. Появилось пара вопросов относительно Android NDK... С NDK можно...

6
znseday
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 505
09.08.2017, 21:48  [ТС] 2
Как оказалось, CMakeLists.txt, который прилагается к скачиваемой библиотеке не подходит для простой вставки в CMakeLists.txt основного NDK-проекта.

Добавлено через 3 минуты
Смог подключить библиотеку "в лоб", прописав вручную все пути для необходимых cpp-файлов. А также подключив зависимые библиотеки (для libpng это zlib, например).
1
yyamix
0 / 0 / 0
Регистрация: 15.03.2018
Сообщений: 3
15.03.2018, 10:59 3
а Android.mk, который надо добавить не подошел?
можешь выложить этот файл? (ковыряю это же и в там же )
0
znseday
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 505
15.03.2018, 17:13  [ТС] 4
Цитата Сообщение от yyamix Посмотреть сообщение
а Android.mk, который надо добавить не подошел?
Я использую CMake, который встраивается в Android Studio, поэтому с mk-файлами не пробовал работать. При работе с CMake подразумевается использование CMakeLists.txt.
0
yyamix
0 / 0 / 0
Регистрация: 15.03.2018
Сообщений: 3
16.03.2018, 11:49 5
Еще по теме:
http://ourinnovativemind.blogspot.co...g-android.html

https://stackoverflow.com/questions/...ake-on-windows

https://stackoverflow.com/questions/...id-ndk-project
0
zoleg
44 / 42 / 8
Регистрация: 10.01.2012
Сообщений: 391
17.03.2018, 20:53 6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.
 
cmake_minimum_required(VERSION 3.4.1)
 
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source db_name_inClass.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.
 
add_library( # Sets the service_name of the library.
             native-lib
 
             # Sets the library as a shared library.
             SHARED
 
             # Provides a relative path to your source file(s).
             # Associated headers in the same location as their source
             # file are automatically included.
             src/main/cpp/native-lib.c
             src/main/cpp/socket_recv_tcp.c
             src/main/cpp/sock_buff_to_char.c
             src/main/cpp/socket_send_message_via_tcp.c
             src/main/cpp/base64.c
             src/main/cpp/gz_compress_to_gzip.c
             src/main/cpp/socket_is_socked_connected.c
             src/main/cpp/is_all_string_digits.c
             src/main/cpp/socket_send_some_chars.c)
 
# Searches for a specified prebuilt library and stores the path as a
# variable. Because system libraries are included in the search path by
# default, you only need to specify the service_name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
 
 
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in the
# build script, prebuilt third-party libraries, or system libraries.
 
target_link_libraries( # Specifies the target library.
                       native-lib
 
                       # Links the target library to the log library
                       # included in the NDK.
                       ${z-lib}
                       android
                       z
                       log)
0
yyamix
0 / 0 / 0
Регистрация: 15.03.2018
Сообщений: 3
17.03.2018, 21:22 7
Спасибо
0
17.03.2018, 21:22
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2018, 21:22

NDK C vs C++ и примеры
Гуру NDK! Посоветуйте! В очередной раз взялся за NDK и вдруг получилось... Успешно запустил все...

SDK or NDK
я начинающий разработчик, на данный момент не много знаю с++. 1) Что лучше изучать SDK и яву или...

Использование NDK
Пытаюсь освоить NDK... И как всегда не хватает ЗАДАНИЙ! Не могу придумать где можно использовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.