HarmonyOS 鸿蒙Next中curl库编译后的so无法读取,系统报错

HarmonyOS 鸿蒙Next中curl库编译后的so无法读取,系统报错 使用官方教程编译的curl库得到的so,集入app后可以正常编译通过,当app运行时DevEco中输出了错误信息,显示无法读取so。另外,官方的给出的curl库编译得到的so是带软链接的,即真正的so是带有版本号后缀的,猜测是否跟Android一样,Harmony无法识别这种格式?

操作步骤:

  1. 按照官方教程:https://gitee.com/openharmony-sig/tpc_c_cplusplus/tree/master/thirdparty/curl 编译openssl库和curl库。
  2. 将编译得到的arm64-v8a-build中的lib集成到app项目中编译运行。

更多关于HarmonyOS 鸿蒙Next中curl库编译后的so无法读取,系统报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

我用Mac M1 平台编译一直报错,楼主怎么编译的?能指教一下嘛

➜ lycium git:(master) ✗ ./build.sh curl

Build OS Darwin

OHOS_SDK=/Users/******/.openharmony/Sdk/12
CLANG_VERSION=15.0.4
x toolchain/
x toolchain/arm-linux-ohos-clang++
x toolchain/aarch64-linux-ohos-clang
x toolchain/arm-linux-ohos-clang
x toolchain/aarch64-linux-ohos-clang++
cp: the -R and -r options may not be specified together

curl not ready. wait openssl nghttp2

Build openssl OpenSSL_1_1_1u start!
/Users/******/Downloads/tpc_c_cplusplus/thirdparty/openssl/openssl-OpenSSL_1_1_1u.zip,存在
openssl-OpenSSL_1_1_1u.zip: OK
openssl_oh_test.patch: OK

Compile OpenHarmony armeabi-v7a openssl OpenSSL_1_1_1u libs…

patching file 'util/check-malloc-errs'
patching file 'util/find-doc-nits'
patching file 'util/find-unused-errs'
patching file 'util/openssl-format-source'
ERROR during : build --prefix=/Users/******/Downloads/tpc_c_cplusplus/lycium/usr/openssl/armeabi-v7a
/Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//openssl build ERROR. errno: 1

nghttp2 not ready. wait openssl_quic CUnit nghttp3 libxml2

curl not ready. wait openssl nghttp2
Build openssl_quic OpenSSL_1_1_1t-quic1 start!
/Users/******/Downloads/tpc_c_cplusplus/thirdparty/openssl_quic/openssl_quic-OpenSSL_1_1_1t-quic1.zip,存在
openssl_quic-OpenSSL_1_1_1t-quic1.zip: OK

Compile OpenHarmony armeabi-v7a openssl_quic OpenSSL_1_1_1t-quic1 libs…

ERROR during : build --prefix=/Users/******/Downloads/tpc_c_cplusplus/lycium/usr/openssl_quic/armeabi-v7a
/Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//openssl_quic build ERROR. errno: 1
Build CUnit 2.1-3 start!
/Users/******/Downloads/tpc_c_cplusplus/thirdparty/CUnit/CUnit-2.1-3.tar.bz2,存在
CUnit-2.1-3.tar.bz2: OK

Compile OpenHarmony armeabi-v7a CUnit 2.1-3 libs…

ERROR during : build --prefix=/Users/******/Downloads/tpc_c_cplusplus/lycium/usr/CUnit/armeabi-v7a
/Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//CUnit build ERROR. errno: 1

nghttp3 not ready. wait CUnit

libxml2 not ready. wait xz
nghttp2 not ready. wait openssl_quic CUnit nghttp3 libxml2
curl not ready. wait openssl nghttp2
nghttp3 not ready. wait CUnit
Build xz v5.4.1 start!
/Users/******/Downloads/tpc_c_cplusplus/thirdparty/xz/xz-v5.4.1.zip,存在
xz-v5.4.1.zip: OK

Compile OpenHarmony armeabi-v7a xz v5.4.1 libs…

ERROR during : build --prefix=/Users/******/Downloads/tpc_c_cplusplus/lycium/usr/xz/armeabi-v7a
/Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//xz build ERROR. errno: 1
libxml2 not ready. wait xz
nghttp2 not ready. wait openssl_quic CUnit nghttp3 libxml2
curl not ready. wait openssl nghttp2
nghttp3 not ready. wait CUnit
libxml2 not ready. wait xz
nghttp2 not ready. wait openssl_quic CUnit nghttp3 libxml2
curl not ready. wait openssl nghttp2

Please check the dependencies of these items:

/Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//nghttp3 /Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//libxml2 /Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//nghttp2 /Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//curl

The follow pkg build error!

/Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//openssl /Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//openssl_quic /Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//CUnit /Users/******/Downloads/tpc_c_cplusplus/lycium/../thirdparty//xz

更多关于HarmonyOS 鸿蒙Next中curl库编译后的so无法读取,系统报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,如果您编译后的curl库(.so文件)无法读取,系统报错可能是由于以下几个原因导致的:

  1. 库文件路径问题:确保.so文件位于应用程序的正确路径下,通常是/lib/lib64目录。如果路径不正确,系统将无法找到并加载库文件。

  2. 库文件权限问题:检查.so文件的权限设置,确保应用程序有足够的权限访问该文件。通常需要r-x权限,即读和执行权限。

  3. 库文件依赖问题:.so文件可能依赖其他库文件,确保所有依赖库都已正确安装并且路径正确。可以使用ldd命令检查库文件的依赖关系。

  4. ABI兼容性问题:确保.so文件与目标设备的ABI(应用二进制接口)兼容。鸿蒙Next可能使用不同的ABI,导致库文件无法正确加载。

  5. 库文件签名问题:鸿蒙系统对应用和库文件的签名有严格要求,确保.so文件已正确签名并且与应用的签名一致。

  6. 系统版本兼容性:鸿蒙Next可能与之前版本的鸿蒙系统在库文件加载机制上有所不同,确保编译环境和目标系统版本兼容。

  7. 库文件编译选项:检查编译.so文件时的编译选项,确保使用了正确的编译器和编译选项,特别是与鸿蒙系统相关的编译选项。

如果上述检查均无问题,建议重新编译curl库,并在编译过程中确保所有相关配置与鸿蒙Next系统要求一致。

在HarmonyOS鸿蒙Next中,如果编译后的curl库(.so文件)无法读取,可能是以下原因导致:

  1. 库路径问题:确保.so文件放置在正确的系统库路径下,或通过LD_LIBRARY_PATH指定路径。
  2. 权限问题:检查.so文件的权限,确保应用程序有读取权限。
  3. 依赖缺失:使用ldd命令检查.so文件的依赖库是否完整。
  4. ABI兼容性:确保.so文件的ABI与目标设备一致,避免架构不匹配。
  5. 加载错误:使用dmesglogcat查看系统日志,定位具体错误信息。

建议重新编译curl库,并确保编译环境和目标设备一致。

回到顶部