【鸿蒙南向开发】如何移植一个C++开源库

本节我们讨论下如果引用一个开源三方库,引入 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 = 
### Navicat 表名自动补全功能失效解决方案 Navicat 的表名自动补全功能可能因多种原因而失效,以下是可能导致此问题的原因及其对应的解决方法: #### 1. **确认设置中的自动补全选项已启用** Navicat 提供了一个选项来控制是否开启 SQL 编辑器中的自动补全功能。如果该功能未被启用,则不会显示任何建议列表。可以通过以下路径检查并调整设置: - 打开 Navicat 软件。 - 进入菜单栏 `工具` -> `选项` -> `SQL 编辑器`。 - 确认勾选了“启用代码完成”以及“显示对象提示”的选项[^1]。 #### 2. **缓存更新不及时** 当数据库结构发生变化(如新增或修改表),Navicat 可能未能即时同步这些更改到其内部缓存中,从而影响自动补全的效果。可以尝试刷新连接以重新加载元数据: - 在左侧的对象窗口右击当前连接名称。 - 选择“刷新”,这会强制软件重新获取最新的数据库模式信息[^2]。 #### 3. **字符编码配置错误** 虽然引用提到新建表时设置了特定的字符集排序规则 (UTF8 utf8_general_ci),但如果客户端与服务器之间的字符集存在差异,也可能干扰某些特性正常运作。确保整个环境一致性非常重要,包括但不限于 MySQL 配置文件 (`my.cnf`) 中定义的部分参数如下所示: ```ini [client] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci ``` #### 4. **版本兼容性问题** 不同版本之间可能存在功能性差异或者 bug 导致预期行为无法实现。对于较旧版 Navicat 用户来说,升级至最新稳定发行版通常能够修复此类异常情况。访问官方网站下载页面即可找到适合操作系统的安装包链接[^3]。 #### 5. **插件冲突或其他自定义脚本的影响** 有时第三方扩展程序可能会改变默认交互逻辑甚至覆盖原有 API 接口调用链路,进而破坏原生组件的功能表现形式。禁用不必要的附加组件后再测试一次或许会有帮助。 --- ### 总结 通过上述分析可知,要恢复 Navicat 中表名自动补全功能可以从四个方面入手:核查偏好设定项状态、清理陈旧资源索引记录、校准文字处理标准框架以及排查潜在外部因素干扰源。每一步骤都需谨慎执行以免造成额外损害。 ```sql -- 示例查询语句用于验证自动补全效果 SELECT * FROM users WHERE username LIKE '%test%'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值