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 。