Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
znseday
18 / 18 / 1
Регистрация: 20.03.2012
Сообщений: 483
#1

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

20.07.2017, 19:37. Просмотров 395. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2017, 19:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Подключить стороннюю NDK-библиотеку к своему NDK-проекту (Программирование Android):

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

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

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

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

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

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

6
znseday
18 / 18 / 1
Регистрация: 20.03.2012
Сообщений: 483
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 / 1
Регистрация: 20.03.2012
Сообщений: 483
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
25 / 25 / 2
Регистрация: 10.01.2012
Сообщений: 275
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2018, 21:22
Привет! Вот еще темы с ответами:

NDK и SDK - Программирование Android
есть класс на яве который использует массив, который с течением времени увеличивается ( то есть массив динамический) в массиве находятся...

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

Сборка приложения, NDK - Программирование Android
По книжке Android NDK:Beginners Guide установил Apache ant, NDK, SDK, Java. Пытаюсь собрать. Делаю всё по книжке: 1) cd...

TCP клиент в NDK - Программирование Android
Как реализовать TCP клиент используя андроид ndk на С++?? Я слышал, что у андроид такое же ядро как и у Linux. То есть на андроид ndk будет...


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

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

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