|
交叉编译protobuf-2.6.1源码 for aarch64 ARMv8架构(成功)
github下载源码:protobuf-2.6.1.zip
解压:protobuf-2.6.1.zip
1、看看配置参数 ./configure --help (还有很多参数需要学习)
- jiang@jiang-Ubuntu:~/jjj_eigen_works/protobuf-2.6.1$ ./configure --help
- `configure' configures Protocol Buffers 2.6.1 to adapt to many kinds of systems.
- Usage: ./configure [OPTION]... [VAR=VALUE]...
- To assign environment variables (e.g., CC, CFLAGS...), specify them as
- VAR=VALUE. See below for descriptions of some of the useful variables.
- Defaults for the options are specified in brackets.
- Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print `checking ...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for `--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or `..']
- Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [/usr/local]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
- By default, `make install' will install all the files in
- `/usr/local/bin', `/usr/local/lib' etc. You can specify
- an installation prefix other than `/usr/local' using `--prefix',
- for instance `--prefix=$HOME'.
- For better control, use the options below.
- Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/protobuf]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
- Program names:
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM run sed PROGRAM on installed program names
- System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
- --target=TARGET configure for building compilers for TARGET [HOST]
- Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --disable-maintainer-mode
- disable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
- --enable-silent-rules less verbose build output (undo: "make V=1")
- --disable-silent-rules verbose build output (undo: "make V=0")
- --enable-dependency-tracking
- do not reject slow dependency extractors
- --disable-dependency-tracking
- speeds up one-time build
- --disable-64bit-solaris Build 64 bit binary on Solaris [default=on]
- --enable-shared[=PKGS] build shared libraries [default=yes]
- --enable-static[=PKGS] build static libraries [default=yes]
- --enable-fast-install[=PKGS]
- optimize for fast installation [default=yes]
- --disable-libtool-lock avoid locking (might break parallel builds)
- Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-zlib include classes for streaming compressed data in and
- out [default=check]
- --with-protoc=COMMAND use the given protoc command instead of building a
- new one when building tests (useful for
- cross-compiling)
- --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use
- both]
- --with-gnu-ld assume the C compiler uses GNU ld [default=no]
- --with-sysroot=DIR Search for dependent libraries within DIR
- (or the compiler's sysroot if not specified).
- Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CXX C++ compiler command
- CXXFLAGS C++ compiler flags
- CXXCPP C++ preprocessor
- Use these variables to override the choices made by `configure' or to help
- it to find libraries and programs with nonstandard names/locations.
- 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"
会报错:
- /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: 无法执行二进制文件: 可执行文件格式错误
- /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: 成功
- Makefile:3634: recipe for target 'unittest_proto_middleman' failed
- make[2]: *** [unittest_proto_middleman] Error 126
- make[2]: 离开目录“/home/jiang/jjj_eigen_works/protobuf-2.6.1/src”
- Makefile:700: recipe for target 'all-recursive' failed
- make[1]: *** [all-recursive] Error 1
- make[1]: 离开目录“/home/jiang/jjj_eigen_works/protobuf-2.6.1”
- Makefile:606: recipe for target 'all' failed
- 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
参考这个的:
- #!/bin/bash
- make distclean
- ./autogen.sh
- export build_dir=`pwd`/libprotobuf/android
- export sysroot=`pwd`/../arm-21-toolchain-clang-64/sysroot ##前面ndk生成的clang-64路径
- export PATH=`pwd`/../arm-21-toolchain-clang-64/bin:$PATH
- export CC="aarch64-linux-android-clang --sysroot $sysroot"
- export CXX="aarch64-linux-android-clang++ --sysroot $sysroot"
- mkdir -p $build_dir/arm64-v8a
- ./configure \
- --host=arm-linux-androideabi \
- --with-protoc=protoc \
- --with-sysroot="$sysroot" \
- --disable-shared \
- --prefix="$build_dir/arm64-v8a" \
- --exec-prefix="$build_dir/arm64-v8a" \
- --enable-cross-compile \
- CFLAGS="-march=armv8-a -D__ANDROID_API__=21" \ #这里不要更改Android 版本
- CXXFLAGS="-frtti -fexceptions -march=armv8-a -D__ANDROID_API__=21" \
- LIBS="-llog -lz -lc++_static"
- make -j12
- make install
复制代码
3、make -j8
4、make install 就会在指定的目录下 安装了 头文件 和 库文件 方便后续的直接使用
|
|