C/C++工程编译常见错误及解决方法

背景简介

我是一名Java大数据工程师,最近公司有个项目要进行跨平台移植。该项目是上年由我和公司的一位资深C++工程师合作完成的(准确来说,我只负责了项目的一些收尾工作。该项目难度挺高的,据说在我之前已经换了好几班人马了,项目末阶段开发及最终验收是由我们两个负责)。该项目对一款基于C++和python语言开发的国际开源软件进行了二次开发。这个项目之前一直是在x86架构上编译运行的,现在我们要移植到arm平台上(华为的鲲鹏云主机),所以很多依赖库需要重新编译。他前段时间离职了,他那部分现在也由我负责了。我就开始恶补C/C++、make、cmake、ccmake和QT等,然后把他写的源码在arm平台上进行编译。跨平台移植,没有编译环境,一切从零开始,遇到无数问题,很多问题可能比较低级,大神勿喷,经验总结如下。

先上张最终编译成功的图

千淘万漉虽辛苦,吹尽狂沙始到金

在这里插入图片描述

编译环境

工欲善其事,必先利其器

在这里插入图片描述

问题1:boost/thread/mutex.hpp: No such file or directory

落花有意随流水,流水无心恋落花

在这里插入图片描述

  • 问题分析及解决方法:

这是没有安装第三方依赖库boost哈!
boost是一套开源的、高度可移植的C++模板库,是比较常用的标准库备库(Additions to the Standard C++ Library)。
boost安装可参考https://www.cnblogs.com/dj0325/p/7977692.html

问题2:error: ‘cout’ is not a member of ‘std’

世间无限丹青手,一片伤心画不成

在这里插入图片描述

  • 问题分析及解决方法:

在报错文件中加入 #include <iostream>

问题3:No rule to make target ‘***’, needed by ‘***’. Stop

问渠哪得清如许,为有源头活水来

在这里插入图片描述

  • 问题分析及解决方法:

编译依赖boost,但依赖库中没有。
首先,检查是否安装了boost。
如果已经安装了boost,那就是没配置到依赖中,可以用find命令找到所缺的依赖,然后复制到目标位置,如图中所示。【使用ldconfig命令或配置变量export LD_LIBRARY_PATH=重新加载依赖库】
ps:【ldd libqxcb.so】可以查看某个库的关联依赖。

问题4:configure: error: cannot guess build type; you must specify one.

横看成岭侧成峰,远近高低各不同

在这里插入图片描述

  • 问题分析及解决方法:
  • 很明显,需要你指定build type
    ./configure --build=arm-linux
  • 或者更新configure相应的config.guessconfig.sub
    wget -O ./config.sub “git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD”
    wget -O ./config.guess “git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD”

问题5:undefined reference to 'boost***__gun_cxx***, std::__cxx11***

不经一番寒彻骨,怎得梅花扑鼻香

在这里插入图片描述
在这里插入图片描述

  • 问题分析及解决方法:

此类问题一般是boost的安装问题
首先查看是否安装了多个版本的boost
不行就卸载重装
这个问题困扰我很久,网上的经验试过来了也没用。最后把原来的boost删除后重装了个更高版本的才解决了问题。

问题6:error adding symbols: File in wrong format

山重水复疑无路,柳暗花明又一村

在这里插入图片描述

  • 问题分析及解决方法:

图中的静态库libreftek.a是在x86上编译的,而这里是在arm平台上编译,所以需在arm平台上重新编译

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WaiSaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值