东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2747|回复: 0
打印 上一主题 下一主题

[C/C++] 交叉编译protobuf-2.6.1源码 for aarch64 ARMv8架构(成功)

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14437
QQ
跳转到指定楼层
楼主
发表于 2022-1-13 14:21:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式




交叉编译protobuf-2.6.1源码 for aarch64 ARMv8架构(成功)






github下载源码:protobuf-2.6.1.zip


解压:protobuf-2.6.1.zip


1、看看配置参数  ./configure --help  (还有很多参数需要学习)


  1. jiang@jiang-Ubuntu:~/jjj_eigen_works/protobuf-2.6.1$ ./configure --help
  2. `configure' configures Protocol Buffers 2.6.1 to adapt to many kinds of systems.

  3. Usage: ./configure [OPTION]... [VAR=VALUE]...

  4. To assign environment variables (e.g., CC, CFLAGS...), specify them as
  5. VAR=VALUE.  See below for descriptions of some of the useful variables.

  6. Defaults for the options are specified in brackets.

  7. Configuration:
  8.   -h, --help              display this help and exit
  9.       --help=short        display options specific to this package
  10.       --help=recursive    display the short help of all the included packages
  11.   -V, --version           display version information and exit
  12.   -q, --quiet, --silent   do not print `checking ...' messages
  13.       --cache-file=FILE   cache test results in FILE [disabled]
  14.   -C, --config-cache      alias for `--cache-file=config.cache'
  15.   -n, --no-create         do not create output files
  16.       --srcdir=DIR        find the sources in DIR [configure dir or `..']

  17. Installation directories:
  18.   --prefix=PREFIX         install architecture-independent files in PREFIX
  19.                           [/usr/local]
  20.   --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  21.                           [PREFIX]

  22. By default, `make install' will install all the files in
  23. `/usr/local/bin', `/usr/local/lib' etc.  You can specify
  24. an installation prefix other than `/usr/local' using `--prefix',
  25. for instance `--prefix=$HOME'.

  26. For better control, use the options below.

  27. Fine tuning of the installation directories:
  28.   --bindir=DIR            user executables [EPREFIX/bin]
  29.   --sbindir=DIR           system admin executables [EPREFIX/sbin]
  30.   --libexecdir=DIR        program executables [EPREFIX/libexec]
  31.   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  32.   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  33.   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  34.   --libdir=DIR            object code libraries [EPREFIX/lib]
  35.   --includedir=DIR        C header files [PREFIX/include]
  36.   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  37.   --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  38.   --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  39.   --infodir=DIR           info documentation [DATAROOTDIR/info]
  40.   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  41.   --mandir=DIR            man documentation [DATAROOTDIR/man]
  42.   --docdir=DIR            documentation root [DATAROOTDIR/doc/protobuf]
  43.   --htmldir=DIR           html documentation [DOCDIR]
  44.   --dvidir=DIR            dvi documentation [DOCDIR]
  45.   --pdfdir=DIR            pdf documentation [DOCDIR]
  46.   --psdir=DIR             ps documentation [DOCDIR]

  47. Program names:
  48.   --program-prefix=PREFIX            prepend PREFIX to installed program names
  49.   --program-suffix=SUFFIX            append SUFFIX to installed program names
  50.   --program-transform-name=PROGRAM   run sed PROGRAM on installed program names

  51. System types:
  52.   --build=BUILD     configure for building on BUILD [guessed]
  53.   --host=HOST       cross-compile to build programs to run on HOST [BUILD]
  54.   --target=TARGET   configure for building compilers for TARGET [HOST]

  55. Optional Features:
  56.   --disable-option-checking  ignore unrecognized --enable/--with options
  57.   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  58.   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  59.   --disable-maintainer-mode
  60.                           disable make rules and dependencies not useful (and
  61.                           sometimes confusing) to the casual installer
  62.   --enable-silent-rules   less verbose build output (undo: "make V=1")
  63.   --disable-silent-rules  verbose build output (undo: "make V=0")
  64.   --enable-dependency-tracking
  65.                           do not reject slow dependency extractors
  66.   --disable-dependency-tracking
  67.                           speeds up one-time build
  68.   --disable-64bit-solaris Build 64 bit binary on Solaris [default=on]
  69.   --enable-shared[=PKGS]  build shared libraries [default=yes]
  70.   --enable-static[=PKGS]  build static libraries [default=yes]
  71.   --enable-fast-install[=PKGS]
  72.                           optimize for fast installation [default=yes]
  73.   --disable-libtool-lock  avoid locking (might break parallel builds)

  74. Optional Packages:
  75.   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  76.   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  77.   --with-zlib             include classes for streaming compressed data in and
  78.                           out [default=check]
  79.   --with-protoc=COMMAND   use the given protoc command instead of building a
  80.                           new one when building tests (useful for
  81.                           cross-compiling)
  82.   --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
  83.                           both]
  84.   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  85.   --with-sysroot=DIR Search for dependent libraries within DIR
  86.                         (or the compiler's sysroot if not specified).

  87. Some influential environment variables:
  88.   CC          C compiler command
  89.   CFLAGS      C compiler flags
  90.   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
  91.               nonstandard directory <lib dir>
  92.   LIBS        libraries to pass to the linker, e.g. -l<library>
  93.   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
  94.               you have headers in a nonstandard directory <include dir>
  95.   CXX         C++ compiler command
  96.   CXXFLAGS    C++ compiler flags
  97.   CXXCPP      C++ preprocessor

  98. Use these variables to override the choices made by `configure' or to help
  99. it to find libraries and programs with nonstandard names/locations.

  100. Report bugs to <protobuf@googlegroups.com>.
复制代码



2、我的执行:
./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ --host=aarch64-linux-gnu --prefix=/home/jiang/my_cross_compile/all_dependence_software_installed/pb_2.6.1_for_aarch64 --enable-shared --enable-static CFLAGS="-march=armv8-a"
会报错
  1. /home/jiang/jjj_eigen_works/protobuf-2.6.1/src/protoc: 行 117: /home/jiang/jjj_eigen_works/protobuf-2.6.1/src/.libs/lt-protoc: 无法执行二进制文件: 可执行文件格式错误
  2. /home/jiang/jjj_eigen_works/protobuf-2.6.1/src/protoc: 行 117: /home/jiang/jjj_eigen_works/protobuf-2.6.1/src/.libs/lt-protoc: 成功
  3. Makefile:3634: recipe for target 'unittest_proto_middleman' failed
  4. make[2]: *** [unittest_proto_middleman] Error 126
  5. make[2]: 离开目录“/home/jiang/jjj_eigen_works/protobuf-2.6.1/src”
  6. Makefile:700: recipe for target 'all-recursive' failed
  7. make[1]: *** [all-recursive] Error 1
  8. make[1]: 离开目录“/home/jiang/jjj_eigen_works/protobuf-2.6.1”
  9. Makefile:606: recipe for target 'all' failed
  10. make: *** [all] Error 2
复制代码

用下面的成功(就加了红色的一个配置啊):
./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ --host=aarch64-linux-gnu --with-protoc=protoc --prefix=/home/jiang/my_cross_compile/all_dependence_software_installed/pb_2.6.1_for_aarch64 --enable-shared --enable-static CFLAGS="-march=armv8-a"


--with-protoc=COMMAND   use the given protoc command instead of building a
                          new one when building tests (useful for
                          cross-compiling)

编译Android armeabi-v7a 和 arm64-v8a的protobuf.a 库


我的执行_for zynq的ip arm核
./configure CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --host=arm-linux-gnueabihf --with-protoc=protoc --prefix=/home/jiang/my_cross_compile/all_dependence_software_installed_zynq/pb_2.6.1_for_zynq --enable-shared --enable-static CFLAGS="-march=armv7-a"
make -j8
make install



参考这个的:
  1. #!/bin/bash

  2. make distclean
  3. ./autogen.sh

  4. export build_dir=`pwd`/libprotobuf/android
  5. export sysroot=`pwd`/../arm-21-toolchain-clang-64/sysroot      ##前面ndk生成的clang-64路径
  6. export PATH=`pwd`/../arm-21-toolchain-clang-64/bin:$PATH
  7. export CC="aarch64-linux-android-clang --sysroot $sysroot"
  8. export CXX="aarch64-linux-android-clang++ --sysroot $sysroot"

  9. mkdir -p $build_dir/arm64-v8a

  10. ./configure \
  11. --host=arm-linux-androideabi \
  12. --with-protoc=protoc \
  13. --with-sysroot="$sysroot" \
  14. --disable-shared \
  15. --prefix="$build_dir/arm64-v8a" \
  16. --exec-prefix="$build_dir/arm64-v8a" \
  17. --enable-cross-compile \
  18. CFLAGS="-march=armv8-a -D__ANDROID_API__=21" \                #这里不要更改Android 版本
  19. CXXFLAGS="-frtti -fexceptions -march=armv8-a -D__ANDROID_API__=21" \
  20. LIBS="-llog -lz -lc++_static"

  21. make -j12
  22. make install
复制代码




3、make -j8
4、make install     就会在指定的目录下 安装了 头文件 和 库文件  方便后续的直接使用


pb_for_aarch64.png (33.87 KB, 下载次数: 157)

pb_for_aarch64.png
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-6 03:56 , Processed in 0.195247 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表