HarmonyOS 鸿蒙Next curl 交叉编译遇到的问题,搞了一星期了求教。

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

HarmonyOS 鸿蒙Next curl 交叉编译遇到的问题,搞了一星期了求教。

项目中用到curl 要编译带 ssl 的 curl ,ssl 的编译非常顺利,curl 编译出现问题一直无法解决,看一下论坛里有没有高手帮帮忙,感谢。

以下是脚本文件内容,当执行 configure 时,会在检查交叉编译的环节出错,出了很多办法,包括修改configure的代码,都没有问题。

后来发现关键问题是 configure 识别不到正确的 host,即便我设置了 host 为 arm-linux 或  linux-armv4、arm-linux-gnueabihf 等最终它都是识别为 
host=i686-pc-cygwin,设置为 --host=arm-linux-ohos 无法识别直接出错说不认识。

我的环境是 windows + cygwin 编译用的sdk是3.1的9。有没有高手知道这个问题如何解决?或者有没有现成的编译脚本搭救一下,搞了一周时间有点崩溃!-_-!!

我就200分全拿来了 ^_^


export ABI=armeabi-v7a
export TARGET=arm-linux-ohos
export HOST=arm-linux

export OHOS_NATIVE_HOME=D:/Huawei/3.1/Sdk/openharmony/9/native export SSLPATH=D:/Huawei/workspace/Curl_Builder/build_ssl/$ABI export BUILDPATH=D:/Huawei/workspace/Curl_Builder/build_curl/$ABI

export PATH=$OHOS_NATIVE_HOME/llvm/bin:$PATH export AR=$OHOS_NATIVE_HOME/llvm/bin/llvm-ar export AS=$OHOS_NATIVE_HOME/llvm/bin/llvm-as export LD=$OHOS_NATIVE_HOME/llvm/bin/ld.lld export RANLIB=$OHOS_NATIVE_HOME/llvm/bin/llvm-ranlib export STRIP=$OHOS_NATIVE_HOME/llvm/bin/llvm-strip export CC="$OHOS_NATIVE_HOME/llvm/bin/clang --target=$TARGET -march=armv7-a" export CFLAGS="–target=$TARGET -march=armv7-a -O3 --sysroot=$OHOS_NATIVE_HOME/sysroot" export CPPFLAGS="-I./include -I$OHOS_NATIVE_HOME/sysroot/usr/include" export LDFLAGS="-Wl,–exclude-libs,ALL --rtlib=compiler-rt -fuse-ld=lld -L$OHOS_NATIVE_HOME/sysroot/usr/lib" export LIBS="-lunwind"

cd curl-7.67.0

./configure --host=$HOST
–prefix=$BUILDPATH
–target=$TARGET
–with-ssl=$SSLPATH
–enable-static
–enable-shared
–disable-verbose
–disable-ftp
–disable-ldap
–disable-ldaps
–enable-threaded-resolver
–enable-libgcc
–enable-ipv6

make <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

以下是出错log: "checking whether we are cross compiling" 这一步正常结果应该是 conftest 文件不存在的。

configure:4458: checking whether we are cross compiling
configure:4466: D:/Huawei/3.1/Sdk/openharmony/9/native/llvm/bin/clang --target=arm-linux-ohos -march=armv7-a -o conftest --target=arm-linux-ohos -march=armv7-a -O3  conftest.c >&5
configure:4470: $? = 0
configure:4477: ./conftest
./configure: line 4479: ./conftest: cannot execute binary file
configure:4481: $? = 126
configure:4488: error: in /cygdrive/d/Huawei/workspace/hwLib/common/Curl_Builder/curl-<span class="hljs-number">7.67</span>.<span class="hljs-number">0</span><span class="hljs-string">': configure:4490: error: cannot run C compiled programs. If you meant to cross compile, use–host’.
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

11 回复
请问楼主现在解决了吗?我们也碰到了同样的问题
是纯HarmonyOS 用的,不是android 兼容版,android ndk 编译的是不能用的。
我编译了一个,你试一下,这是下载地址下载地址

你这个是用android 的 ndk 编译的吗 ? 少了libssl.so 测试不了,能不能也发上来,我马上试试。我编译的是 .a 不能直接用。 Error loading header libcurl.so, namespace ndk has no inherits <<-- 按个这个提示如果是android ndk 编译的也是用不了的。 Error loading header: can’t find library libcurl.so in namespace: moduleNs_default
dlopen_impl load library header failed for libcurl.so
Error loading header libssl.so.3, namespace ndk has no inherits
Error loading header: can’t find library libssl.so.3 in namespace: moduleNs_default

我这个是用linux的aarch64-linux-gnu交叉编译的,libssl.so的地址为:https://gitee.com/yunkss/ef-tool/blob/1.1.x/efndk/libs/arm64-v8a/libssl.so

会出错

Error loading header libcurl.so, namespace ndk has no inherits Error loading header: can’t find library libcurl.so in namespace: moduleNs_default dlopen_impl load library header failed for libdwutils.so Error mapping header libssl.so.3: invaliled Ehdr Error loading header libssl.so.3: failed to map header

是NDK中需要编译成arm64-v8a的带有 ssl 的 curl的so文件么,还是

是的, HarmonyOS 用的 curl + ssl。以前在android 的ndk上编译用类似的脚本很顺利。

周末我编一下试试,前几天我编了一个openssl的

针对HarmonyOS鸿蒙Next中curl交叉编译的问题,可能涉及多个方面,如编译环境配置、源码版本兼容性、依赖库处理等。首先,请确保使用的DevEco Studio和HarmonyOS SDK是最新版本,并正确配置了交叉编译环境。其次,检查curl源码与鸿蒙系统的兼容性,可能需要修改部分代码以适应鸿蒙的API。最后,确保所有依赖库(如SSL/TLS库)都已正确编译并链接。如果问题依旧没法解决,请加我微信,我的微信是itying888,进一步探讨解决方案。

回到顶部