踩坑!openharmony L1级动态库编译使用 原创 精华
春节不停更,此文正在参加「星光计划-春节更帖活动」@[toc]( openharmony动态库编译使用
背景
linux系统存在大量使用静态库和动态库的情况,由于开发的需要,需要提供动态库进行二次开发和自动化测试,因此着手进行了鸿蒙相关动态使用的学习与研究。本次测试主要使用动态库,如果有感兴趣的可以尝试在此基础上编译静态库。
问题
动态的编译生成可以通过c或者c++ 语言编写编译而成。一般的linux 操作系统可以完成C 调用C++ 编译动态库,或者反正,C++ 调用C编译而成的动态库。由于开发的需要,基于C和C++ 混编时出现编译失败情况,具体详情体通过以下流程讲述。
环境
本次编译动态库为君正x2000环境,开发板:君正x2000
动态库编译
目录如下:
helloworld.cpp 文件类容:
helloworld.h 头文件内容
BUILD.gn 文件内容
注意:BUILD.gn文件中我们可以通过 print 函数来检验是否编译当前代码。
通过嵌入到对应的项目中,通过编译可以获得到我们所需的so文件。当前版使用C调用C++ 编译而成的动态库,当然使用C调用C++库时需要使用转换,否则出现编译出现下面问题。本次编译出现下面问题,主要是缺少#ifdef __cplusplus 对头文件内容进行转换,
可执行文件调用动态库
目录结构如下:
源码文件内容如下:
BUILD.gn 文件内容:
注意:由于当前编译是调用动态库,需要在 deps 处指定编译依赖库,即前面编译好的动态库。否则出现编译失败情况
运行
编译完成之后我们可以获得对应可执行文件helloworld_test 和动态库 libhelloworld_client.so
将可执行文件和动态库上传到开发板中。动态库放入到/usr/lib 目录下,
运行可执行文件:
问题总结
第一、c掉C++ 时需要使用#ifdef __cplusplus 当然这里的c++ 没有使用类,
第二、使用deps来指定对应的依赖。
感谢排坑
666