HarmonyOS 鸿蒙Next Native C++无法调用第三方so库
HarmonyOS 鸿蒙Next Native C++无法调用第三方so库
请教下,Native C++无法调用第三方so库
目录
CMakeLists.txt
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.5.0)
project(MyArkUIXNative)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
#set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/…/…/…/libs/arm64-v8a”)
#set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/…/…/…/libs/x86_64”)
#find_library( # Sets the name of the path variable.
# log-lib
#
# # Specifies the name of the NDK library that
# # you want CMake to locate.
# log
# )
include_directories(
#“base”
${NATIVERENDER_ROOT_PATH}
${NATIVERENDER_ROOT_PATH}/include
${NATIVERENDER_ROOT_PATH}/include/base
#${CMAKE_CURRENT_SOURCE_DIR}/base
)
#导入所有源文件
file(GLOB allCPP *.c *.h *.cpp)
add_library(
entry SHARED napi_init.cpp
#导入所有源文件
${allCPP}
)
target_link_libraries(
entry PUBLIC libace_napi.z.so
<span class="hljs-comment">#链接 jniLibs具体库</span>
# libavcodec.so
# libavdevice.so
# libavfilter.so
# libavformat.so
# libavutil.so
# libcrypto.so
# libmp.so
# libprotobuf.so
# libprotoc.so
# libpt.so
# libssl.so
# libswresample.so
# libswscale.so
# libuac.so
# libwebrtc_audio_mixer.so
)
target_link_libraries(entry PUBLIC libhilog_ndk.z.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libavcodec.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libavdevice.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libavfilter.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libavformat.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libavutil.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libcrypto.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libmp.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libprotobuf.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libprotoc.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libpt.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libssl.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libswresample.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libswscale.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libuac.so)
target_link_libraries(entry PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/…/…/…/libs/${OHOS_ARCH}/libwebrtc_audio_mixer.so)
napi_init.cpp
UserAgentClient::CreateUAC("/storage/emulated/0/vmc");
这里是调用头文件里的函数
添加后运行报错:
更多关于HarmonyOS 鸿蒙Next Native C++无法调用第三方so库的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next Native C++无法调用第三方so库的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
针对HarmonyOS鸿蒙Next Native C++无法调用第三方so库的问题,以下是一些可能的解决方案:
-
检查so库放置位置:
- 确保编译好的so库文件已正确放置在项目的entry/libs/对应架构目录下(如arm64-v8a)。
-
配置CMakeLists.txt:
- 在CMakeLists.txt文件中添加代码,链入so库。注意库名前需加lib前缀(如libadd.so)。
-
引入头文件:
- 将so库对应的头文件放到entry/src/main/cpp目录下或子文件夹中,并在.cpp文件中通过#include引入。
-
确保库文件与目标平台匹配:
- 编译so库时,需使用与目标平台兼容的编译器和ABI设置。
-
检查JNI或桥接方式:
- 如果是在Native层与JS层交互,确保通过JNI或其他桥接方式正确地将so库中的函数映射到JS层。
-
清理和重建项目:
- 有时,简单的清理和重建项目可以解决一些不明确的问题。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。