支持netconf协议的NETOPEER2 netopeer2交叉编译步骤

所使用的交叉编译器

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值