HarmonyOS 鸿蒙Next OpenHarmonyNext交叉编译,要编译protocolbuf的C代码生成.a静态库(需求是生成Aarch64架构)给到项目工程链接使用

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

HarmonyOS 鸿蒙Next OpenHarmonyNext交叉编译,要编译protocolbuf的C代码生成.a静态库(需求是生成Aarch64架构)给到项目工程链接使用

OpenHarmonyNext交叉编译,要编译protocolbuf的C代码生成.a静态库(需求是生成Aarch64架构)给到项目工程链接使用,现在在Linux环境下写了一个脚本文件,不管如何修改target选项,生成的库始终是x86_64架构,无法进行链接,询问各位大佬有无解决办法。

6 回复
已解决,感谢某位花粉

楼主可以麻烦分享下怎么解决的不

开发者您好,该问题已反馈研发人员进一步分析,请耐心等待!

编译脚本如下:

export CC=${OHOS_TOOLCHAIN}/bin/clang

export CXX=${OHOS_TOOLCHAIN}/bin/clang++

export AR=${OHOS_TOOLCHAIN}/bin/llvm-ar

export AS=${OHOS_TOOLCHAIN}/bin/llvm-as

export NM=${OHOS_TOOLCHAIN}/bin/llvm-nm

export STRIP=${OHOS_TOOLCHAIN}/bin/llvm-strip

export RANLIB=${OHOS_TOOLCHAIN}/bin/llvm-ranlib

export LD=${OHOS_TOOLCHAIN}/bin/ld.lld

#export LDFLAGS="--rtlib=compiler-rt -fuse-ld=lld"

export LDFLAGS="--rtlib=compiler-rt -L${OHOS_TOOLCHAIN}/lib -lc++ -fuse-ld=lld"

export CFLAGS="-fPIC --target=aarch64-linux-ohos -march=armv8-a -isystem ${OHOS_TOOLCHAIN}/include"

export CPPFLAGS="-fPIC --target=aarch64-linux-ohos -march=armv8-a -isystem ${OHOS_TOOLCHAIN}/include"

CURPWD=${PWD}

DISABLE="--disable-protoc"

# 编译 protobuf

PROTOBUF_PACKAGE_PATH=${CURPWD}/protobuf-all-3.6.1.tar.gz   # 压缩包路径

PROTOBUF_NAME=protobuf-3.6.1                                # 解压名称

PROTOBUF_BUILD_PATH=${CURPWD}/build/protobuf    # 输出路径

rm -fr ${PROTOBUF_NAME}

if [ ! -d ${PROTOBUF_NAME} ]; then # 如果 protobuf-3.6.1 不存在,则从压缩包中解压

  tar -xvf ${PROTOBUF_PACKAGE_PATH} -C ${CURPWD} ; wait

fi

cd ${PROTOBUF_NAME}

make clean 2>/dev/null

./configure --prefix=${PROTOBUF_BUILD_PATH} --host=arm CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}"

make

make install

cd ${CURPWD}

# 编译 protobuf-c

export PKG_CONFIG_PATH=${PROTOBUF_BUILD_PATH}/lib/pkgconfig/  # 依赖项

export CPPFLAGS=-I${PROTOBUF_BUILD_PATH}/include              # 依赖头文件路径

export LIBS=-L${PROTOBUF_BUILD_PATH}/lib                      # 依赖库路径

PROTOBUF_C_PACKAGE_PATH=${CURPWD}/protobuf-c-1.4.1.tar.gz     # 压缩包路径

PROTOBUF_C_NAME=protobuf-c-1.4.1                              # 解压名称

PROTOBUF_C_BUILD_PATH=${CURPWD}/build/proto-c     # 输出路径

rm -fr ${PROTOBUF_C_NAME}

if [ ! -d ${PROTOBUF_C_NAME} ]; then # 如果 protobuf-c-1.4.1 不存在,则从压缩包中解压

  tar -xvf ${PROTOBUF_C_PACKAGE_PATH} -C ${CURPWD} ; wait

fi

   

cd ${PROTOBUF_C_NAME}

make clean 2>/dev/null

./configure --prefix=${PROTOBUF_C_BUILD_PATH} --host=arm ${DISABLE} CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}"

make -v

make install

cd ${CURPWD}

# 编译 protobuf-c

export PKG_CONFIG_PATH=${PROTOBUF_BUILD_PATH}/lib/pkgconfig/ # 依赖项

export CPPFLAGS=-I${PROTOBUF_BUILD_PATH}/include # 依赖头文件路径

export LIBS=-L${PROTOBUF_BUILD_PATH}/lib # 依赖库路径

PROTOBUF_C_PACKAGE_PATH=${CURPWD}/protobuf-c-1.4.1.tar.gz # 压缩包路径

PROTOBUF_C_NAME=protobuf-c-1.4.1 # 解压名称

PROTOBUF_C_BUILD_PATH=${CURPWD}/build/proto-c # 输出路径

rm -fr ${PROTOBUF_C_NAME}

if [ ! -d ${PROTOBUF_C_NAME} ]; then # 如果 protobuf-c-1.4.1 不存在,则从压缩包中解压

tar -xvf ${PROTOBUF_C_PACKAGE_PATH} -C ${CURPWD} ; wait

fi

cd ${PROTOBUF_C_NAME}

make clean 2>/dev/null

./configure --prefix=${PROTOBUF_C_BUILD_PATH} --host=arm ${DISABLE} CC="${CC}" CXX="${CXX}" CFLAGS="${CFLAGS}"

make -v

make install

编译报错如下

楼主您好,始终是x86_64架构,你的描述提供的信息有限,能否提供更详细的信息,协助定位到具体问题。

针对HarmonyOS(鸿蒙)或OpenHarmony环境下的Next分支,交叉编译Protocol Buffers的C代码以生成Aarch64架构的.a静态库,你可以遵循以下步骤:

  1. 确认你的编译环境已安装交叉编译工具链,适用于Aarch64架构。
  2. 下载Protocol Buffers的C语言版本源码。
  3. 使用CMake或Makefile(取决于源码配置)进行配置,指定交叉编译器和目标架构。
  4. 运行编译命令,确保指定生成静态库(.a)和Aarch64架构。
  5. 编译完成后,在指定的输出目录中查找生成的.a文件。

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部