ndk编译 c源码编译-Android.mk NDK 开发需要理解的句型

Android.mk 句型和变量简介 I. 简介

Android.mk 是一种脚本语言,用于将 C/C++ 源文件粘附到 NDK 的创建文件中。

官网 Android.mk 介绍:

二、一些超基本的句型

例如,我们使用 # 表示注释,$() 表示值,:= 表示参数ndk编译 c源码编译,+= 表示追加,依此类推。

在我们学习之前,我们至少必须理解这一点。

例:

# 注释内容使用 "#" 号

# call 是调用一个系统提供的宏函数,此处是 my-dir
# $() 是取值
# := 是赋值
LOCAL_PATH := $(call my-dir)

# 我们也可以使用 ifeq 和 ifneq 进行条件判断
ifeq ($(HOST_OS, linux)
...(省略)
else
...(省略)
endif

# 使用 := 是赋值,当某一行很长时,可以使用反斜杠 换行
LOCAL_SRC_FILES := adb.c
utils.c

# 使用 += 是附加
LOCAL_SRC_FILES += $(USB_SRCS)

ndk编译 c源码编译_编译源码时卡死_编译源码是什么意思

3. 常用变量名

LOCAL_PATH := $(call my-dir)
LOCAL_PREBUILT_DIR := prebuilt

# 预编译模块1
include $(CLEAR_VARS)
LOCAL_MODULE := fastcv_android
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libfastcv_android.a
include $(PREBUILT_STATIC_LIBRARY)

# 预编译模块2
include $(CLEAR_VARS)
LOCAL_MODULE := api_fastcv
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libapi_fastcv.a
include $(PREBUILT_STATIC_LIBRARY)

# 预编译模块3
include $(CLEAR_VARS)
LOCAL_MODULE := fmath_android_armv7
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libfmath_android.a
include $(PREBUILT_STATIC_LIBRARY)

# 预编译模块4
include $(CLEAR_VARS)
LOCAL_MODULE := api_fmath
LOCAL_SRC_FILES := $(LOCAL_PREBUILT_DIR)/lib/$(TARGET_ARCH_ABI)/libapi_fmath.a
include $(PREBUILT_STATIC_LIBRARY)

# 目标模块
include $(CLEAR_VARS)
LOCAL_MODULE := demo
# 源文件
LOCAL_SRC_FILES := hello.cpp
world.cpp

# 额外的头文件
LOCAL_C_INCLUDES += $(LOCAL_PATH) $(LOCAL_PATH)/$(LOCAL_PREBUILT_DIR)/include
# 需要链接的系统库
LOCAL_LDLIBS := -llog -lz -L$(SYSROOT)/usr/lib/$(TARGET_ARCH_ABI) -ljnigraphics
# 一些宏定义和编译选项
LOCAL_CFLAGS := -DFASTCV_USE_ARM -DUSE_ARM
LOCAL_CFLAGS += -std=c++11
# 链接上面预编译的静态库
LOCAL_STATIC_LIBRARIES := -L$(LOCAL_PATH)/lib api_fastcv fastcv_android fmath_android api_fmath
# 编译所需要动态库
LOCAL_SHARED_LIBRARIES := face_api
# 指定生成动态库
include $(BUILD_SHARED_LIBRARY)

编译源码是什么意思_编译源码时卡死_ndk编译 c源码编译

请注意ndk编译 c源码编译,模块始终以 include$(CLEAR_VARS) 开头,以 include$(BUILD_SHARED_LIBRARY) 结尾(这也可以是另一个编译模板,例如 BUILD_STATIC_LIBRARY)。

4. NDK 提供的功能宏

使用 $(调用) 调用函数。

编译源码是什么意思_ndk编译 c源码编译_编译源码时卡死

下表描述了 NDK 提供的 GNUMake 函数宏。事实上,一些厂商的源代码也会提供一些多样化的功能。

————————————————

版权声明:本文为CSDN博主“A Fei__”的原创文章,根据CC4.0BY-SA版权合同,请附上原始来源链接和本声明。

原文链接:

开发环境要求

要创建 NanUI 应用程序,您的开发环境必须满足以下条件:

NanUI 依赖 CEF 和 ChromiumFX

NanUI 是基于 ChromiumFX 开发的,ChromiumFX 是 Chromium 嵌入式框架 (CEF) for .NET 的实现。

NanUI0.7的运行需要依赖ChromiumEmbeddedFramework (CEF) 77.1.18的二补代码文件以及对应版本的ChromiumFX二补代码文件。 您可以选择自动下载并编译这两个补充文件cef源码编译,也可以直接通过 Nuget 包管理器手动安装此依赖项。

自动下载或编译依赖 ChromiumEmbeddedFramework (CEF) 框架

可以从网站下载编译好的对应版本的CEF补码代码文件:

如果您有丰富的CEF开发经验,也可以按照CEF官方指南自行编译CEF框架。 您可以通过自己编译CEF框架来添加更多可定制的功能。

ChromiumEmbeddedFramework原生不支持h.264视频播放(该格式为商业格式),因此需要添加相关编译符号并重新编译CEF源码才能实现h.264格式视频播放。

ChromiumFX

您可以从ChromiumFX项目的托管网站下载77.1.18.0版本的源代码,并按照指南编译x86框架和x64框架平台下的二补代码文件:

使用 NuGet 包管理器安装依赖项

源码编译安装的基本过程_源码编译器下载_cef源码编译

PM> Install-Package NetDimension.NanUI.Runtime

NuGet包管理器会根据你项目的结构信息,手动生成依赖项目的目录和文件结构。 不需要关注目录结构信息,这也是最快、最简单的方法。

NanUI依赖文件夹结构

对于您的项目结构,以下文档中列出了正确的 NanUI 依赖项目目录和二补文件结构。


    │  
    └─fx
        ├─Resources
        │  │  cef.pak
        │  │  cef_100_percent.pak
        │  │  cef_200_percent.pak
        │  │  cef_extensions.pak
        │  │  devtools_resources.pak
        │  │  
        │  └─locales
        │          
        │          
        ├─x64
        │      chrome_elf.dll
        │      d3dcompiler_47.dll
        │      icudtl.dat
        │      libcef.dll
        │      libcfx64.dll
        │      libEGL.dll
        │      libGLESv2.dll
        │      natives_blob.bin
        │      snapshot_blob.bin
        │      v8_context_snapshot.bin
        │      
        └─x86
                chrome_elf.dll
                d3dcompiler_47.dll
                icudtl.dat
                libcef.dll
                libcfx.dll
                libEGL.dll
                libGLESv2.dll
                natives_blob.bin
                snapshot_blob.bin
                v8_context_snapshot.bin


    │  
    │  cef.pak
    │  cef_100_percent.pak
    │  cef_200_percent.pak
    │  cef_extensions.pak
    │  chrome_elf.dll
    │  d3dcompiler_47.dll
    │  devtools_resources.pak
    │  icudtl.dat
    │  libcef.dll
    │  libcfx64.dll
    │  libEGL.dll
    │  libGLESv2.dll
    │  natives_blob.bin
    │  snapshot_blob.bin
    │  v8_context_snapshot.bin
    │  
    └─locales
            


    │  
    │  cef.pak
    │  cef_100_percent.pak
    │  cef_200_percent.pak
    │  cef_extensions.pak
    │  chrome_elf.dll
    │  d3dcompiler_47.dll
    │  devtools_resources.pak
    │  icudtl.dat
    │  libcef.dll
    │  libcfx.dll
    │  libEGL.dll
    │  libGLESv2.dll
    │  natives_blob.bin
    │  snapshot_blob.bin
    │  v8_context_snapshot.bin
    │  
    └─locales
            

编译NanUI源码或者使用补码包

cef源码编译_源码编译器下载_源码编译安装的基本过程

你可以从GitHub获取NanUI的全部源码并使用VS2019编译源码cef源码编译,或者通过NuGet安装NanUI二补包。

PM> Install-Package NetDimension.NanUI

NanUI相关补码包

下表展示了NanUI项目的各个NuGet包以及相关信息。