HarmonyOS 鸿蒙Next curl 交叉编译遇到的问题,搞了一星期了求教。
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>
你这个是用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
是的, HarmonyOS 用的 curl + ssl。以前在android 的ndk上编译用类似的脚本很顺利。
周末我编一下试试,前几天我编了一个openssl的
好的
针对HarmonyOS鸿蒙Next中curl交叉编译的问题,可能涉及多个方面,如编译环境配置、源码版本兼容性、依赖库处理等。首先,请确保使用的DevEco Studio和HarmonyOS SDK是最新版本,并正确配置了交叉编译环境。其次,检查curl源码与鸿蒙系统的兼容性,可能需要修改部分代码以适应鸿蒙的API。最后,确保所有依赖库(如SSL/TLS库)都已正确编译并链接。如果问题依旧没法解决,请加我微信,我的微信是itying888,进一步探讨解决方案。