本节我们讨论下如果引用一个开源三方库,引入 OpenHarmony 编译并在设备上运行。
1. 开源库结构
我们选取比较简单的 linux-logo 开源库(库地址为:https://github.com/deater/linux_logo),
. ├── configure ├── contrib ├── libsysinfo-0.3.0 ├── linux_logo.c ├── LINUX_LOGO.FAQ ├── linux_logo.h ├── ll_asm ├── load_logo.c ├── load_logo.h ├── load_logos.h ├── logo_config ├── logo_config.BSD ├── logo_config.Irix ├── logo_config.Solaris ├── logos ├── logo_types.h ├── parse_logos ├── parse_logos.c ├── po ├── tests
在 linux 下的运行步骤和结果
●目录 ls
●配置 ./configure
●编译,运行 make&./linux_logo
3. 移植到 OpenHarmony 下进行编译运行
移植到 OpenHarmony 需要在三方库里增加文件夹和 gn 文件。OpenHarmony 里三方库的位置在[代码目录]/third_party 位置
我们可以在三方库里创建文件夹:linuxlogo,然后在 linuxlogo 里创建 BUILD.gn 文件。接下来我们需要拷贝第三方 linuxlog 文件到此文件夹内。然后我们需要阅读三方库的 Makefile 文件。以下是基本的 makefile 的规则:
●makefile 的规则
target... : prerequisites ...
command
...
-----------------------------------------------------------------
●target 就是一个目标文件,可以是 Object File,也可以是执行文件。还可以是一个动作/伪目标/标签(Label),如 clean。
- prerequisites就是,要生成那个target所需要的文件或是目标。
- command也就是make需要执行的命令。(任意的Shell命令)
这是一个文件的依赖关系,target 这一个或多个的目标文件依赖于 prerequisites 中的文件,其生成规则定义在 command 中。在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,make 会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。这就是整个 make 的依赖性。
GNU 的 make 工作时的执行步骤如下:(想来其它的 make 也是类似)
\1. 读入所有的 Makefile。
\2. 读入被 include 的其它 Makefile。
\3. 初始化文件中的变量。
\4. 推导隐晦规则,并分析所有规则。
\5. 为所有的目标文件创建依赖关系链。
\6. 根据依赖关系,决定哪些目标要重新生成。
\7. 执行生成命令。
1-5 步为第一个阶段,6-7 为第二个阶段。第一个阶段中,如果定义的变量被使用了,那么,make 会把其展开在使用的位置。但 make 并不会完全马上展开,如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变量才会在其内部展开。规则包含两个部分,一个是依赖关系,一个是生成目标的方法。
查看 makefile(内部有一些关键命令的注释)
Makefile 会告诉 make 命令做什么(通常是如何编译和链接程序)。
路径: /../Makefile
-include Makefile.default
PROGNAME = linux_logo
#ifeq ($(OS),IRIX64)
# LDFLAGS += -lintl
#endif
ifeq ($(OS),FreeBSD)
LDFLAGS += -lintl
endif
#
# Installation location
#
INSTALL_BINPATH = $(DESTDIR)$(PREFIX)/bin
INSTALL_MANPATH =