如何将libjpeg-turbo作为静态库添加到Android NDK中?

问题描述 投票:0回答:1

我想在我的Android NDK项目中使用libjpeg-turbo(确切地说只有libjpeg)。我找不到如何将该库完全添加到我的项目中。

  • 首先,我通过使用 BUILDING.md (作为四个 ANDROID_ABI: arm64-v8a, armeabi-v7a, x86, x86-64).
  • 其次,我在项目中准备 src/main/cpp 夹子 libjpeg 并放入 ANDROID_ABI 文件夹中的libjpeg.a静态库。

接下来,我在 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})

我没有任何构建错误,但我不能在我的cpp文件中包含libjpeg头。

android c++ cmake android-ndk libjpeg-turbo
1个回答
0
投票

你收到了编译错误,因为你的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})
© www.soinside.com 2019 - 2024. All rights reserved.