HarmonyOS 鸿蒙Next Native开发, 如果需要生成多个so并相互有依赖关系, 如何配置

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Native开发, 如果需要生成多个so并相互有依赖关系, 如何配置

Native创建示例中 只是生成了一个so文件去集成调用;

1、如果在同一个模块中, 当有 A.so  依赖于 B.soC.so, 三个动态库均为源码方式在studio中使用cmake构建, 如何设置构建的依赖关系, 

2、生成的so文件均在build/intermediates/cmake/default/obj/${OHOS_ARCH} 下, 如何修改生成库位置? 使用set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/jniLibs/${OHOS_ARCH})  未起作用…

3、像预定义的编译参数 如 OHOS_ARCH 、OHOS_PLATFORM 这种在哪可见详细文档?

4、native构建时添加的message() 日志在哪看?

5 回复

1、可以使用 target_link_libraries(A PUBLIC B C) 来设置依赖关系

cke_1070.png

2、可以在CMakeLists.txt文件中添加 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY xxxxxx)来设置库文件生成位置

cke_1600.png

或者在build-profile.json5中arguments添加 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY= xxxxxx 来进行设置

cke_2303.png

需要注意的事虽然会在指定位置生成库文件,还会在原本的位置也同样进行生成,应该是bug,还在找人定位

3、可以查看下文档: https://gitee.com/openharmony/build/blob/master/docs/how%20to%20use%20CMake%20with%20NDK.md#%E4%BD%BF%E7%94%A8cmake%E4%B8%8Eohos-ndk%E7%BC%96%E8%AF%91%E4%B8%89%E6%96%B9%E5%BA%93

4、可以开启下如下设置

cke_3167.png

之后即可在output上查看message的日志信息

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

在HarmonyOS(鸿蒙)的Next Native开发中,处理多个.so库(共享对象文件)并配置它们之间的依赖关系,通常需要在CMakeLists.txt或ndk-build的Android.mk文件中进行适当配置。

  1. CMakeLists.txt配置

    • 使用add_library命令为每个.so库创建一个库目标,并指定源文件。
    • 使用target_link_libraries来指定库之间的依赖关系。确保依赖的库在链接前已经被声明和编译。
    • 示例:
      add_library(libA SHARED src/libA.c)
      add_library(libB SHARED src/libB.c)
      target_link_libraries(libB PRIVATE libA)  # libB依赖于libA
      
  2. Android.mk配置(如果仍在使用ndk-build):

    • 使用LOCAL_MODULE为每个库定义模块名。
    • 使用LOCAL_SRC_FILES指定源文件。
    • 使用LOCAL_SHARED_LIBRARIESLOCAL_STATIC_LIBRARIES来添加依赖项。
    • 示例:
      include $(CLEAR_VARS)
      LOCAL_MODULE    := libA
      LOCAL_SRC_FILES := libA.c
      include $(BUILD_SHARED_LIBRARY)
      
      include $(CLEAR_VARS)
      LOCAL_MODULE    := libB
      LOCAL_SRC_FILES := libB.c
      LOCAL_SHARED_LIBRARIES := libA
      include $(BUILD_SHARED_LIBRARY)
      

确保在构建过程中,所有依赖的库都已正确配置,并且它们的编译顺序满足依赖关系。如果问题依旧没法解决,请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部