HarmonyOS鸿蒙Next中C++编程如何引入libuv库

HarmonyOS鸿蒙Next中C++编程如何引入libuv库 直接在cmake文件中添加 target_link_libraries(concurrent PUBLIC libace_napi.z.so libuv.so libhilog_ndk.z.so) 但缺少include文件 查阅后添加 include_directories("/Users/buyi/hongmeng/env/HMSDK/openharmony/10/native/sysroot/usr/include/") 然后就报以下这个错误

In file included from /Users/buyi/hongmeng/mt-project/gtest-demo/entry/src/test/cpp/calculate/calculate_test.cpp:1: 
In file included from /Users/buyi/hongmeng/mt-project/gtest-demo/entry/src/test/cpp/calculate/../gtest/googletest/include/gtest/gtest.h:53: 
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk/usr/include/c++/v1/cstdint:144: 
/Users/buyi/hongmeng/env/HMSDK/openharmony/10/native/sysroot/usr/include/stdint.h:20:10: fatal error: 'bits/alltypes.h' file not found

想问一下一般在鸿蒙开发c时应该怎么引入第三方库 例如libuv


更多关于HarmonyOS鸿蒙Next中C++编程如何引入libuv库的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

1、编写代码 新增一个简单的工具类,该工具类中有一个Add方法,调用该方法返回两个数之和

util.h

#ifndef ADDDEMO_UTIL_H
#define ADDDEMO_UTIL_H

int Add(int a,int b);

#endif //ADDDEMO_UTIL_H

util.cpp

#include <iostream>
#include "include/util.h"

int Add(int a, int b) {
   return a + b;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.26)
project(AddDemo)

set(CMAKE_CXX_STANDARD 11)
include_directories(${PROJECT_SOURCE_DIR}/include)

add_library(AddDemo SHARED util.cpp)

2、将上面的代码编译成动态链接库 可以参考下面的链接进行构建

OHOS SDK编译cmake构建的库 - 开发者平台部 - 3MS知识管理社区

3、增加依赖 在src/main/cpp下面增加文件夹thirdPart,并将util.h头文件加入

在libs下面的armeabi-v7a和arm64-v8a下增加步骤2中编译好的so文件

在CMakeLists.txt文件中添加so库的动态链接

target_link_libraries(entry PUBLIC
libace_napi.z.so
libhilog_ndk.z.so
${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libAddDemo.so #此处是引用的第三方库
)
target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdPart/)

在build-profile.json5中添加armeabi-v7a和arm64-v8a。注意这里如果不需要多个架构的只填一个也可以

"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt",
"arguments": "",
"cppFlags": "",
"abiFilters": [
  "armeabi-v7a",
  "arm64-v8a"
]
}

4、调用 此时可以直接引用头文件进行调用

#include "thirdPart/util.h"
static napi_value Add(napi_env env, napi_callback_info info) {
   size_t requireArgc = 2;
   size_t argc = 2;
   napi_value args[2] = {nullptr};

   napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);

   napi_valuetype valuetype0;
   napi_typeof(env, args[0], &valuetype0);

   napi_valuetype valuetype1;
   napi_typeof(env, args[1], &valuetype1);

   double value0;
   napi_get_value_double(env, args[0], &value0);

   double value1;
   napi_get_value_double(env, args[1], &value1);

   napi_value sum;
   napi_create_double(env, Add(value0, value1), &sum);

   return sum;
}

参考这个链接引入第三方库

请参考该链接移植三方库

https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/lycium/doc/ohos_use_sdk/OHOS_SDK-Usage.md

更多关于HarmonyOS鸿蒙Next中C++编程如何引入libuv库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中进行C++编程时,引入libuv库的步骤如下:

  1. 下载libuv源码:首先,从libuv的官方GitHub仓库下载源码。可以通过以下命令克隆仓库:

    git clone https://github.com/libuv/libuv.git
    
  2. 编译libuv:进入libuv源码目录,使用CMake进行编译。假设你已经安装了CMake和Ninja(或Make),执行以下命令:

    mkdir build
    cd build
    cmake -GNinja ..
    ninja
    

    编译完成后,你会在build目录下看到生成的静态库文件(如libuv.a)。

  3. 将libuv库添加到鸿蒙项目中:在你的鸿蒙项目中,将编译好的libuv.a文件放入libs目录中。然后,在项目的BUILD.gn文件中添加对libuv库的引用。例如:

    shared_library("your_target") {
        sources = [
            "your_source_files.cpp",
        ]
        include_dirs = [
            "path_to_libuv_include",
        ]
        ldflags = [
            "-Lpath_to_libuv_libs",
            "-luv",
        ]
    }
    
  4. 配置头文件路径:确保在项目的头文件路径中包含libuv的头文件目录。可以在BUILD.gn文件中通过include_dirs指定。

  5. 编写代码使用libuv:在你的C++代码中,包含libuv的头文件并开始使用其API。例如:

    #include <uv.h>
    
    int main() {
        uv_loop_t *loop = uv_default_loop();
        // 使用libuv的API
        uv_run(loop, UV_RUN_DEFAULT);
        return 0;
    }
    
  6. 编译鸿蒙项目:最后,使用鸿蒙的编译工具链编译你的项目,确保libuv库被正确链接。

通过以上步骤,你可以在HarmonyOS鸿蒙Next的C++项目中成功引入并使用libuv库。

在HarmonyOS鸿蒙Next中引入libuv库,首先确保libuv库已编译为适用于鸿蒙的静态库(.a文件)。然后,在C++项目的CMakeLists.txt中,通过target_link_libraries指定libuv库的路径,并将其链接到目标可执行文件或库中。例如:

target_link_libraries(your_target_name /path/to/libuv.a)

最后,在C++代码中包含libuv头文件即可使用其功能。

回到顶部