C/C++工程編譯常見錯誤及解決方法

背景簡介

我是一名Java大數(shù)據(jù)工程師,最近公司有個項目要進(jìn)行跨平臺移植。該項目是上年由我和公司的一位資深C++工程師合作完成的(準(zhǔn)確來說,我只負(fù)責(zé)了項目的一些收尾工作。該項目難度挺高的,據(jù)說在我之前已經(jīng)換了好幾班人馬了,項目末階段開發(fā)及最終驗收是由我們兩個負(fù)責(zé))。該項目對一款基于C++和python語言開發(fā)的國際開源軟件進(jìn)行了二次開發(fā)。這個項目之前一直是在x86架構(gòu)上編譯運行的,現(xiàn)在我們要移植到arm平臺上(華為的鯤鵬云主機),所以很多依賴庫需要重新編譯。他前段時間離職了,他那部分現(xiàn)在也由我負(fù)責(zé)了。我就開始惡補C/C++、make、cmake、ccmake和QT等,然后把他寫的源碼在arm平臺上進(jìn)行編譯??缙脚_移植,沒有編譯環(huán)境,一切從零開始,遇到無數(shù)問題,很多問題可能比較低級,大神勿噴,經(jīng)驗總結(jié)如下。

先上張最終編譯成功的圖

千淘萬漉雖辛苦,吹盡狂沙始到金

1704882992506_6F08BB9D-FB60-4af5-9C11-2FFDB6B6E38C.png

編譯環(huán)境

工欲善其事,必先利其器

image.png

問題1:boost/thread/mutex.hpp: No such file or directory

落花有意隨流水,流水無心戀落花

image.png
  • 問題分析及解決方法:

這是沒有安裝第三方依賴庫boost哈!
boost是一套開源的、高度可移植的C++模板庫,是比較常用的標(biāo)準(zhǔn)庫備庫(Additions to the Standard C++ Library)。
boost安裝可參考https://www.cnblogs.com/dj0325/p/7977692.html

問題2:error: 'cout' is not a member of 'std'

世間無限丹青手,一片傷心畫不成

image.png
  • 問題分析及解決方法:

在報錯文件中加入 #include <iostream>

問題3:No rule to make target '', needed by ''. Stop

問渠哪得清如許,為有源頭活水來

image.png
  • 問題分析及解決方法:

編譯依賴boost,但依賴庫中沒有。
首先,檢查是否安裝了boost。
如果已經(jīng)安裝了boost,那就是沒配置到依賴中,可以用find命令找到所缺的依賴,然后復(fù)制到目標(biāo)位置,如圖中所示。

問題4:configure: error: cannot guess build type; you must specify one.

橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同

image.png
  • 問題分析及解決方法:
  • 很明顯,需要你指定build type
    ./configure --build=arm-linux
  • 或者更新configure相應(yīng)的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***

不是一番梅徹骨,怎得梅花撲鼻香

image.png
image.png
  • 問題分析及解決方法:

此類問題一般是boost的安裝問題
首先查看是否安裝了多個版本的boost
不行就卸載重裝
這個問題困擾我很久,網(wǎng)上的經(jīng)驗試過來了也沒用。最后把原來的boost刪除后重裝了個更高版本的才解決了問題。

問題6:error adding symbols: File in wrong format

山重水復(fù)疑無路,柳暗花明又一村

image.png
  • 問題分析及解決方法:

圖中的靜態(tài)庫libreftek.a是在x86上編譯的,而這里是在arm平臺上編譯,所以需在arm平臺上重新編譯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容