所使用的交叉编译器
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.4/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/snapshots/gcc-linaro-4.9-2017.01/configure SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-objc-gc --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=hard --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --with-fpu=vfpv3-d16 --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/sysroots/arm-linux-gnueabihf --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabihf/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabihf --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-amd64-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 4.9.4 (Linaro GCC 4.9-2017.01)
Cmake的交叉编译
在CMakeList.txt内加入以下代码
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-g++)
SET(TOOLCHAIN_DIR "/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf")
SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
或者新建arm_linux_setup.cmake
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-g++)
SET(TOOLCHAIN_DIR "/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf")
SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
使用
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake .. 命令
来调用交叉编译工具
环境搭建
cmocka
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
make
make install DESTDIR=$PWD/tmp
graphviz
apt-get install graphviz
sudo apt-get install graphviz graphviz-doc
doxygen
sudo apt-get install doxygen
libtool
sudo apt-get install libtool
以下所需源码已上传CSDN,欢迎下载
(1条消息) 源码netopeer2-副本.zip-Linux文档类资源-CSDN文库
PCRE
mkdir arm_build && cd arm_build
../configure --build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf --enable-utf --enable-unicode-properties CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CXX=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ --prefix=$PWD/tmp
make && make install
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
libyang
mkdir arm_build && cd arm_build
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
Make && make install DESTDIR=$PWD/tmp
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
libev
mkdir arm_build && cd arm_build
../configure --build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CXX=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ --prefix=$PWD/tmp
make && make install
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
libredblack
mkdir arm_build && cd arm_build
../configure --build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CXX=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ --prefix=$PWD/tmp
make
# 首次执行make会报错
SyntaxError: Non-ASCII character '\xc2' in file ./rbgen on line 9, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
Makefile:714: recipe for target 'example4.c' failed
# 此处不影响使用,再次make即可通过
make && make install
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
Google Protocol Buffers (protobuf-2.6.1)
# 先编译主机版本
autoreconf -f -i -Wall,no-obsolete # 生成configure文件
mkdir host_build && cd host_build
../configure --prefix=/usr
make
sudo make install
# 交叉编译
mkdir arm_build && cd arm_build
../configure --build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf --with-protoc=protoc CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CXX=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ --prefix=$PWD/tmp
make && make install
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
protobuf-c-1.2.1
#若找不到对应的protobuf-2.6.1可使用以下命令添加pkgconfig环境变量
export PKG_CONFIG_PATH=/home/cross/netopeer/protobuf-2.6.1/arm_build/tmp/lib/pkgconfig
参考 <https://www.jianshu.com/p/01699c4f3015?utm_campaign=maleskine>
# 先编译主机版本
./autogen.sh
mkdir host_build && cd host_build
../configure --prefix=/usr
make
sudo make install
# 交叉编译
mkdir arm_build && cd arm_build
../configure --build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CXX=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ --prefix=$PWD/tmp
make && make install
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
Sysrepo
# 先编译主机版本
# 修改CMakeLists.txt,将37行CMAKE_C_FLAGS中的“-Wpedantic”和“-Wno-language-extension-token”选项删掉,并释掉389行的add_subdirectory(swig),否则编译无法通过
mkdir host_build && cd host_build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=Off -DCALL_TARGET_BINS_DIRECTLY=Off -DREPOSITORY_LOC:PATH=/etc/sysrepo ..
# 使用vim修改sysrepo.pb-c.c,在vim中执行:
%s/*message = init_value;/memcpy(message, \&init_value, sizeof(init_value));/
# 如不执行此步骤,后续运行sysrepo时将收到SIGBUS信号导致程序退出
# 此问题与ARM对非对齐内存访问的处理有关
make
sudo make install
# 交叉编译
# 修改CMakeLists.txt,将37行CMAKE_C_FLAGS中的“-Wpedantic”和“-Wno-language-extension-token”选项删掉,并释掉389行的add_subdirectory(swig),否则编译无法通过
mkdir arm_build && cd arm_build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=Off -DCALL_TARGET_BINS_DIRECTLY=Off -DREPOSITORY_LOC:PATH=/etc/sysrepo -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
# 使用vim修改sysrepo.pb-c.c,在vim中执行:
%s/*message = init_value;/memcpy(message, \&init_value, sizeof(init_value));/
# 如不执行此步骤,后续运行sysrepo时将收到SIGBUS信号导致程序退出
# 此问题与ARM对非对齐内存访问的处理有关
$ make
$ make install DESTDIR=$PWD/tmp
# 注意arm_build目录下会生成install-yang.sh,后续需要在板子上执行此脚本安装yang文件
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
openssl
./config no-asm -shared --openssldir=/home/cross/netopeer/openssl-1.0.2n/tmp --prefix=/home/cross/netopeer/openssl-1.0.2n/build
# 修改Makefile
CC= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
AR= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar $(ARFLAGS) r
RANLIB= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ranlib
#删掉所有的-m64 -m32
make
sudo make install
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
Zlib
tar jvxf zlib-1.2.3.tar.bz2
cd zlib-1.2.3/
#它的configure不支持用CC变量来指定交叉工具链
export CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc //它的configure不支持用CC变量来指定交叉工具链
./configure --prefix=$PWD/tmp
make
make install
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
libssh 依赖openssl以及zlib
mkdir arm_build && cd arm_build
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
# 初次执行cmake会报错
Configuring incomplete, errors occurred!
# 原因待查,经测试再此执行可通过
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
make
# 会报类似下列错误
/opt/arm/usr/lib/gcc/arm-broadcom-linux-gnueabi/4.7.3/../../../../arm-broadcom-linux-gnueabi/bin/ld: warning: libcrypto.so.1.0.0, needed by ../lib/libssh.so.4.8.3, not found (try using -rpath or -rpath-link)
../lib/libssh.so.4.8.3: undefined reference to `xxx'
# 解决方法
cd /opt/arm/usr/arm-broadcom-linux-gnueabi/sysroot/lib
sudo ln -s ../../../lib/libcrypto.so.1.0.0 ./
到编译器的对应目录 gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib 建立软连接!!!!!!!
sudo ln -s /home/cross/netopeer/openssl-1.0.2n/build/lib/libcrypto.so.1.0.0 ./
sudo ln -s /home/cross/netopeer/zlib-1.2.11/tmp/lib/libz.so.1 ./
make
make install DESTDIR=$PWD/tmp
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
libnetconf2
mkdir arm_build && cd arm_build
cmake cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
make
make install DESTDIR=$PWD/tmp
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
libcurl
mkdir arm_build && cd arm_build
../configure --build=x86_64-unknown-linux-gnu --host=arm-linux-gnueabihf CC=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc CXX=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ RANLIB= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ranlib --prefix=$PWD/tmp
make
make install
#将lib 及include 拷贝到编译链对应目录
sudo cp -rf ./lib/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib
sudo cp -rf ./include/* /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/include
netopeer2
# 编译cli
cd cli
mkdir arm_build && cd arm_build
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
make && make install DESTDIR=$PWD/tmp
# 编译server
cd server
mkdir arm_build && cd arm_build
cmake -DENABLE_CONFIGURATION=OFF -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake -DSYSREPO_INCLUDE_DIR=/home/cross/netopeer/sysrepo-0.7.9/arm_build/tmp/usr/local/include -DSYSREPO_LIBRARY="/home/cross/netopeer/sysrepo-0.7.9/arm_build/tmp/usr/local/lib/libsysrepo.so" ..
make && make install DESTDIR=$PWD/tmp