android/log.h 使用 cmake 构建时未找到
android/log.h not found when building with cmake
我已经开始在 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
这是我在 studio 中构建时工作正常的原始 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
感谢您的帮助。
可能包含目录不是 correct/present。
您可以使用 make VERBOSE=1
检查提供给编译器的包含目录
您可以使用 include_directories(...) 在您的 cmake 中添加它
添加android/log.h文件所在路径
实际问题是 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)
文件有问题。
每当你添加 .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 --> 我创建了文件
我已经开始在 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
这是我在 studio 中构建时工作正常的原始 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
感谢您的帮助。
可能包含目录不是 correct/present。
您可以使用 make VERBOSE=1
检查提供给编译器的包含目录您可以使用 include_directories(...) 在您的 cmake 中添加它 添加android/log.h文件所在路径
实际问题是 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)
文件有问题。 每当你添加 .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 --> 我创建了文件