Linux交叉编译平台实验总结,交叉编译总结

本文总结了Linux交叉编译的经验,包括对cartographer项目中Gmock、Gtest、Glog模块的交叉编译,以及Boost、Ceres、protobuf和lua的配置与编译。重点介绍了如何处理依赖库,如zlib、bzip2、suitesparse、tbb、openblas等,以及解决undefined reference错误的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思考:

对交叉编译不熟悉,一些事后感觉很简单的问题事前烦恼了很久。源代码的编译大致可以分为三个类,用cmake的,

用make的, 用脚本的。用cmake的最好改,其次是用脚本的,一般文档写得全。用make的往往是很简陋的,没文档,相关资料也少。

总结:

一.cartographer的Gmock GTest Glog模块的交叉编译

首先下载Gmock GTest Glog的源码,Gmock和GTest在github上的一个仓库中

修改cmakelist中修改

cmakelist中的设置

#告知当前使用的是交叉编译方式,必须配置

SET(CMAKE_SYSTEM_NAME Linux)

SET(TOOLCHAIN_DIR "/home/gzpeite/pettoolchain")

#指定编译工具,一定要设置

#或交叉编译器使用绝对地址

SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabi-gcc)

#指定C++交叉编译器

SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabi-g++)

#不一定需要设置

#指定交叉编译环境安装目录...

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)

二cartographer中的boost的iostream,首先在boost官网下载boost版本

我下的是boost_1.6的版本,不同的版本,流程不一样,

[http://www.boost.org](http://www.boost.org)

编译过程

1.首先运行boost解压目录下的

**./bootstrap.sh**

2.修改生成的**project-config.jam**文件

修改:

using gcc : arm : arm-none-linux-gnueabi-gcc ;

修改(这边不改也没事):

option.set prefix :(交叉编译器所在位置);

option.set exec-prefix :(交叉编译器所在位置)/bin ;

option.set libdir :(交叉编译器所在位置)/lib ;

option.set includedir :(交叉编译器所在位置)/include ;

如果编译boost时出现以下问题,按照如下流程可解决

看前面的 pkgconfig 。

就是他的东西。

pkgconfig 是一个命令程序,他通过一个通用的参数从 .pc 文件里面获取一些数据来帮助调用某个函数库的程序得到正确的编译参数。这是开发用的程序,如果你不需要开发编译程序。这部分都是 *-devel 包里面的数据。这些包卸载即可。

其实 pkg-config 就是个二传手而已。不过他提供了一个通用的参数获取方式,很多软件还是比较喜欢给他准备一个配置数据文件的。

网上给的建议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值