【问题标题】:android/log.h not found when building with cmake使用 cmake 构建时找不到 android/log.h
【发布时间】:2015-03-19 08:50:06
【问题描述】:

我已经开始在 Android Studio 中使用 Android NDK 进行开发,但这很痛苦,因为它没有适当的 C++ 支持。所以我尝试创建一个 cmake 项目来构建我的东西。我用过android-cmake,到目前为止它运行良好,除了<android/log.h><android/native_window.h> 和可能所有<android/*> 包含都找不到。 IDE(CLion)也因此将它们标记为丢失。我在CMakeLists.txt 中遗漏了什么吗?

这里是 CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.4)
project(App)

SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

include(AndroidNdkGdb)
include(AndroidNdkModules)

android_ndk_gdb_enable()

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/src/main/libs/armeabi-v7a)

set(LIBRARY_DEPS GLESv2 android log)

include_directories(${PROJECT_SOURCE_DIR}/src/main/lib/armeabi-v7a/freetype/include/freetype2)

file(GLOB_RECURSE SRCS *.cpp)
file(GLOB_RECURSE HDRS *.h)

add_library(nativeegl SHARED ${SRCS} ${HDRS})
target_link_libraries(nativeegl log android)

android_ndk_gdb_debuggable(nativeegl)

和 cmake 启动参数:

-DCMAKE_TOOLCHAIN_FILE=android.toolchain.cmake \
-DANDROID_NDK=/opt/android-ndk -DCMAKE_BUILD_TYPE=Debug \
-DANDROID_ABI="armeabi-v7a" -DANDROID_STL=gnustl_static \
-DANDROID_NATIVE_API_LEVEL=android-21

这是我在工作室中构建时可以正常工作的原始 Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := nativeegl
LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%, %, $(wildcard $(LOCAL_PATH)/*.cpp))

LOCAL_C_INCLUDES :=
LOCAL_CFLAGS := -std=c++11 -O2 -Wtype-limits -Wmissing-field-initializers -Wreturn-type -Wuninitialized

LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2
LOCAL_STATIC_LIBRARIES := android_native_app_glue ndk_helper freetype

include $(BUILD_SHARED_LIBRARY)

$(call import-add-path,$(LOCAL_PATH)/../lib/$(TARGET_ARCH_ABI))
$(call import-module,freetype)

和 Application.mk:

APP_STL := gnustl_static
APP_PLATFORM := android-10
APP_ABI := armeabi-v7a

感谢您的帮助。

【问题讨论】:

    标签: android-ndk cmake


    【解决方案1】:

    实际的问题是一个android-cmake 文件中的错误和CMakeLists.txt 中的错误cmake 变量。它怎么发生的?可能我已经遵循了一些旧版本 android-cmake 的教程。下面是 CMakeLists.txt 现在的样子:

    cmake_minimum_required(VERSION 2.8.4)
    project(App)
    
    SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
    
    include(AndroidNdkGdb)
    include(AndroidNdkModules)
    
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/src/main/libs/armeabi-v7a)
    
    set(LIBRARY_DEPS GLESv2 android log EGL)
    
    include_directories(${PROJECT_SOURCE_DIR}/src/main/lib/armeabi-v7a/freetype/include/freetype2)
    
    file(GLOB_RECURSE SRCS *.cpp)
    file(GLOB_RECURSE HDRS *.h)
    
    android_ndk_gdb_enable()
    
    add_library(nativeegl SHARED ${SRCS} ${HDRS})
    target_link_libraries(nativeegl log android)
    
    android_ndk_gdb_debuggable(nativeegl)
    

    【讨论】:

      【解决方案2】:

      可能包含目录不正确/不存在。

      您可以使用 make VERBOSE=1 检查提供给编译器的包含目录

      您可以使用 include_directories(...) 在您的 cmake 中添加它 添加android/log.h文件所在的路径。

      【讨论】:

        【解决方案3】:

        文件中的问题。 每当您添加 .cpp 文件时,您都需要像这样在 CMakeLists.txt 中更新

        add_library(libraryName SHARED
        file_name1.cpp
        file_name2.cpp)
        

        就我而言。

        add_library( native-lib SHARED
                 native-lib.cpp
                 webp_engine.cpp
                 webp_link.cpp)
        

        native-lib --> 库名称(默认名称,我不编辑)。

        webp_engine.cpp --> 我创建了文件。

        webp_link.cpp --> 我创建的文件

        【讨论】:

          猜你喜欢
          • 2018-12-30
          • 2015-11-04
          • 1970-01-01
          • 1970-01-01
          • 2019-05-25
          • 2020-03-04
          • 1970-01-01
          • 1970-01-01
          • 2021-10-22
          相关资源
          最近更新 更多