讨论广场 问答详情
OH4.1版本L1设备如何使用预编译so?
老孙来了 2024-12-17 15:45:54
94 评论 分享

编译L1设备时,在框架中使用一个预编译的so,编译通过但是镜像烧录后无法在系统中找到该预编译的so。

使用方式如下

94 评论 分享
写回答
全部评论(2)

在OpenHarmony 4.1版本的L1设备上使用预编译so(shared object)时,如果编译通过但烧录后的镜像中找不到该so,可能遇到以下问题:

  1. 路径问题:确认你在编译时指定的so文件路径是否正确。L1设备可能有特定的库目录结构,需要将so放在那个正确的目录下,例如lib/armeabi-v7alib/arm64-v8a

  2. 依赖关系:确保预编译so与你的应用和OpenHarmony框架之间存在正确的依赖。如果so是为特定模块编写的,可能需要在编译时链接到相应的模块。

  3. 配置文件:检查编译配置文件(如.mk或.cmake)是否包含了正确的目标和库路径,以便在生成的镜像中包含预编译so。

  4. 烧录过程:确认烧录工具是否正确地将so复制到了设备上。有时候,即使so被编译进镜像,烧录时也需要额外的操作来确保它被正确安装。

  5. 权限问题:L1设备可能有权限管理机制,检查应用是否有足够的权限访问和使用预编译的so。

  6. 版本兼容性:确认预编译so与OpenHarmony 4.1版本是否完全兼容。如果so是为旧版编写的,可能需要对其进行适配或重新编译以匹配新环境。

  7. 日志检查:在烧录和运行过程中查看设备的系统日志,寻找关于找不到so文件的相关错误信息。

为了解决问题,建议你按照以下步骤操作:

  • 检查编译命令行参数,确保正确指定了so的位置。
  • 确认应用的CMakeLists.txt或.mk文件中包含了正确的链接语句。
  • 如果可能,尝试在开发板上手动复制so到设备的相应目录,并运行应用查看是否能正常工作。
  • 查阅OpenHarmony官方文档或者社区论坛,看看是否有类似问题的解决方案。

如果以上步骤都确认无误,那么可能是某个环节出了问题,需要进一步分析日志或寻求更专业的技术支持。

2024-12-24 10:22:44
1 楼

需要采用拷贝的方式,参考如下:

build_ext_component("rootfs_lib") {
  exec_path = rebase_path(".", root_build_dir)
  outdir = rebase_path("$root_out_dir")
  command = "./build.sh ${outdir}"
}

其中build.sh参考如下:

set -e
OUT_DIR="$1"

function main(){
    CUR_DIR=$(cd $(dirname "$0");pwd)

    cp -rf $CUR_DIR/lib/libvncserver.so $OUT_DIR/
}

main "$@"

 

2024-12-17 19:32:29