Как добавить libjpeg-turbo Android NDK в качестве библиотеки stati c - PullRequest
0 голосов
/ 16 июня 2020

Я хочу использовать libjpeg-turbo (только libjpeg) в моем проекте Android NDK. Я не могу найти, как полностью добавить библиотеку в свой проект.

  • Во-первых, я создаю его, используя BUILDING.md (как четыре ANDROID_ABI: arm64-v8a, armeabi-v7a, x86, x86-64).
  • Во-вторых, я готовлю в своем проекте src/main/cpp папку libjpeg и помещаю в ANDROID_ABI папки libjpeg.a stati c библиотеки.

Затем я добавляю к CMakeLists.txt:

add_library( libjpeg STATIC IMPORTED )
set_target_properties( libjpeg
        PROPERTIES
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libjpeg/${ANDROID_ABI}/libjpeg.a )
# and
target_link_libraries(
    native-lib
    libjpeg
    ${log-lib})

Ниже весь мой файл CMakeLists.txt:

cmake_minimum_required(VERSION 3.4.1)

add_library( libjpeg STATIC IMPORTED )
set_target_properties( libjpeg
        PROPERTIES
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libjpeg/${ANDROID_ABI}/libjpeg.a )


include_directories(src/main/cpp/rapidjson/)
include_directories(src/main/cpp/Eigen)

file(GLOB CPP_FILES "src/main/cpp/*.cpp")
add_library(
        native-lib
        SHARED

        native-lib.cpp
        common.cpp
        archive.cpp
        crc32.cpp
        image.cpp
        read_manifest.cpp
        sensors.cpp
        thumbnail.cpp
        upf.cpp
        upf-toolkit.cpp
        write_manifest.cpp
        write_upf.cpp
        )
find_library(log-lib log)
target_link_libraries(native-lib libjpeg ${log-lib})

У меня нет ошибок сборки, но я не могу включить Заголовок libjpeg в моем cpp файле.

1 Ответ

0 голосов
/ 17 июня 2020

Вы получаете ошибку компиляции, потому что ваш код CMake не указывает расположение файлов заголовков libjpeg. Вы можете указать каталог, содержащий заголовки libjpeg, установив свойство INTERFACE_INCLUDE_DIRECTORIES для импортированной цели libjpeg.

add_library( libjpeg STATIC IMPORTED )
set_target_properties( libjpeg
        PROPERTIES
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libjpeg/${ANDROID_ABI}/libjpeg.a
        INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/libjpeg/include
)

Примечание. Возможно, вам придется изменить путь чтобы соответствовать месту нахождения этих заголовков на вашем компьютере.

С парочкой других придирчивых примечаний (не связанных с ошибкой) ваш обновленный файл CMake может выглядеть примерно так:

cmake_minimum_required(VERSION 3.4.1)

# You should always put the project directive at the top of your root CMakeLists.txt file.
project(MyProject)

add_library( libjpeg STATIC IMPORTED )
set_target_properties( libjpeg
        PROPERTIES
        IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libjpeg/${ANDROID_ABI}/libjpeg.a
        INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/libjpeg/include
)

# You can list multiple directories in one include_directories() call.
include_directories(
    src/main/cpp/rapidjson/
    src/main/cpp/Eigen
)

# Looks like this isn't used. Maybe you can remove it.
file(GLOB CPP_FILES "src/main/cpp/*.cpp")

add_library(
        native-lib
        SHARED

        native-lib.cpp
        common.cpp
        archive.cpp
        crc32.cpp
        image.cpp
        read_manifest.cpp
        sensors.cpp
        thumbnail.cpp
        upf.cpp
        upf-toolkit.cpp
        write_manifest.cpp
        write_upf.cpp
        )
find_library(log-lib log)

# Always place the scoping argument (e.g. PUBLIC, PRIVATE) in this call.
target_link_libraries(native-lib PUBLIC libjpeg ${log-lib})
...