若該文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原文出處
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130533941文章來源地址http://www.zghlxwxcb.cn/news/detail-464063.html
紅胖子網(wǎng)絡(luò)科技博文大全:開發(fā)技術(shù)集合(包含Qt實(shí)用技術(shù)、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機(jī)、軟硬結(jié)合等等)持續(xù)更新中…
Linux系統(tǒng)移植和驅(qū)動(dòng)開發(fā)專欄
上一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(一):helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯基本流程》
下一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測(cè)試》文章來源:http://www.zghlxwxcb.cn/news/detail-464063.html
前言
??編譯ubuntu驅(qū)動(dòng)之前,發(fā)現(xiàn)使用的gcc是7.3.0,而使用apt管理和下載的都無法直接或間接安裝gcc7.3.0,于是只能從源碼安裝gcc7.3.0編譯器。
GCC
概述
??GCC是以GPL許可證所發(fā)行的自由軟件,也是GNU計(jì)劃的關(guān)鍵部分。GCC的初衷是為GNU操作系統(tǒng)專門編寫一款編譯器,現(xiàn)已被大多數(shù)類Unix操作系統(tǒng)(如Linux、BSD、MacOS X等)采納為標(biāo)準(zhǔn)的編譯器,甚至在微軟的Windows上也可以使用GCC。GCC支持多種計(jì)算機(jī)體系結(jié)構(gòu)芯片,如x86、ARM、MIPS等,并已被移植到其他多種硬件平臺(tái)。
??GCC原名為GNU C語言編譯器(GNU C Compiler),只能處理C語言。但其很快擴(kuò)展,變得可處理C++,后來又?jǐn)U展為能夠支持更多編程語言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各類處理器架構(gòu)上的匯編語言等,所以改名GNU編譯器套件(GNU Compiler Collection) 。
下載gcc7.3.0源碼
??下載地址:https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
GCC編譯
步驟一:安裝所需要的環(huán)境
??這里肯定要上網(wǎng)了,要是沒有上網(wǎng)則只能自己去下載源碼包,然后配置、編譯和安裝三部曲了,而且還得注意版本號(hào),所以最好還是先安裝一次查看版本號(hào),再去下載對(duì)應(yīng)版本號(hào)的源碼,去目標(biāo)機(jī)離線安裝。
??下面是configure配置gcc會(huì)出現(xiàn)的問題,所以需要先安裝依賴庫(kù)。
??
sudo apt-get install libgmp-dev
sudo apt-get install libmpfr-dev
sudo apt-get install libmpc-dev
??
??這里安裝完,然后裝的gcc7.5, 不要卸載已有的gcc,查看“入坑一”。
步驟二:下載解壓
tar xvf gcc-7.3.0.tar.gz
??
步驟三:配置configure
./configure
??這里要增加c和c++的配置,不然編譯出來只有g(shù)++了
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
??查看 “入坑二”。
??
步驟四:編譯make
make -j4
??
??第一次編譯后再下執(zhí)行幾次make -j4,最后再執(zhí)行一次make,確認(rèn)每個(gè)線程都正常跑完(PS:有些錯(cuò)了就停止了,但是被沒停止的線程沖掉了,保持這個(gè)習(xí)慣即可避免疏忽)。
??編譯出錯(cuò)。
步驟五:編譯出錯(cuò)“fatal error: asm/errno.h: No such file or directory”
??
??引入error.h的頭文件,這里查了很多asm文件夾,最后發(fā)現(xiàn)只有asm-generic下的才有error.h
sudo find / -name asm
??以下的一些都沒有error.h:
??
??只有asm-generic下的才有error.h
sudo ln -s /usr/include/asm-generic /usr/include/asm
??
??然后繼續(xù)編譯,make -j8
??編譯出錯(cuò)。
步驟六:編譯出錯(cuò)“sanitizer_syscall_generic.inc:15:24: error: ‘__NR_open’ was not declared in this scope”
??
??這里錯(cuò)誤實(shí)際上是前面帶進(jìn)來的
sudo ln -s /usr/include/asm-generic /usr/include/asm
??是錯(cuò)誤的,需要更改為另外一個(gè),這里要先刪除,否則ln新建不了:
sudo rm /usr/include/asm
sudo ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/asm
ls /usr/include/asm
ls -l /usr/include/asm
??
??然后繼續(xù)編譯,make -j8
步驟七:編譯成功
??
步驟八:安裝
sudo make install
??
??
步驟九:查看版本號(hào)確認(rèn)
??
入坑
入坑一:本地需要g++,否則編譯報(bào)錯(cuò)
問題
??卸載了g++,編譯gcc的時(shí)候報(bào)錯(cuò):
??
原理
??可能跟交叉編譯一樣,交叉編譯的編譯器也是需要一個(gè)編譯器編譯交叉編譯器的源碼來生成交叉編譯器的(只不過最近幾年sdk已經(jīng)自帶了交叉編譯器了)
解決
??安裝gcc,再次編譯即可。
入坑二:安裝后只有g(shù)++,沒有g(shù)cc
問題
??gcc版本是7.5,g++版本是7.3。
原理
??配置文件需要配置編譯c和c++的,默認(rèn)只有c++的。
解決
??修改配置文件
./configure
??這里要增加c和c++的配置,不然編譯出來只有g(shù)++
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
??然后重新編譯走一遍流程解決。
??
上一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(一):helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯基本流程》
下一篇:《Linux驅(qū)動(dòng)開發(fā)筆記(三):基于ubuntu的helloworld驅(qū)動(dòng)源碼編寫、makefile編寫以及驅(qū)動(dòng)編譯加載流程測(cè)試》
若該文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原文出處
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130533941
到了這里,關(guān)于Linux驅(qū)動(dòng)開發(fā)筆記(二):ubuntu系統(tǒng)從源碼編譯安裝gcc7.3.0編譯器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!