日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Ubuntu >内容正文

Ubuntu

ubuntu执行编译好的文件显示文件不存在_嵌入式开发 | 什么是交叉编译(CROSS_COMPILE)...

發(fā)布時間:2025/3/15 Ubuntu 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ubuntu执行编译好的文件显示文件不存在_嵌入式开发 | 什么是交叉编译(CROSS_COMPILE)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在嵌入式系統(tǒng)開發(fā)中,經(jīng)常會聽到一個詞:交叉編譯。到底什么是"交叉編譯"呢?為什么要使用"交叉編譯"呢?今天這篇文章,我們來討論下這個話題。

在討論交叉編譯之前,我們先來聊聊編譯。

1、編譯

在程序開發(fā)中,使用高級語言編寫的代碼被稱為源代碼,比如用C語言編寫的后綴名為.c的文件,或者C++編寫的后綴名為.cpp的文件。源代碼不能被機器執(zhí)行,必須轉(zhuǎn)換成二進制的機器代碼(指令+數(shù)據(jù))才能被CPU執(zhí)行。將源代碼轉(zhuǎn)換成機器代碼的過程稱為編譯(Compile),編譯的工作需要編譯器(Complier)來完成。

編譯器對源代碼進行語法檢查,只有沒有語法錯誤的源代碼才能被編譯通過。源代碼經(jīng)過編譯后,并沒有生成最終的可執(zhí)行文件,而是生成一種被稱為目標文件(Object File)的中間文件。比如,Visual C++的目標文件后綴名為.obj,而GCC的目標文件后綴名為.o

源代碼可能包含多個源文件,比如main.c/fun1.c/fun2.c等等,編譯器會對源文件逐個進行編譯。因此,有幾個源文件,就會生成幾個目標文件;

目標文件并不能被執(zhí)行,因為它可能存在一些問題,比如源文件之間的引用關(guān)系導致的問題。

舉個例子:文件A.c引用了文件B.c中的變量"EXT_someflag",A.c和B.c分別編譯生成A.o和B.o,A.o中并沒有變量"EXT_someflag"的定義,必須依靠B.o才能形成完整的代碼。

同樣的情況表現(xiàn)在源代碼對庫函數(shù)的引用。

把經(jīng)過編譯后生成的目標文件,按照其內(nèi)在引用關(guān)系彼此相連接而生成一個完整的、可執(zhí)行的文件的過程稱為鏈接。

鏈接工作由鏈接器完成。

因此,源文件生成可執(zhí)行文件要經(jīng)過編譯和鏈接兩個步驟才能完成。為了方便,我們也把這個過程統(tǒng)稱為編譯。本文的主題"交叉編譯"也是包含了編譯和鏈接的步驟,不再贅述。

與交叉編譯相對應(yīng)的是"本地編譯(native compile")。

理解本地編譯有助于更好地理解交叉編譯,所以,我們先來看看什么是本地編譯?

2、本地編譯

所謂"本地編譯",是指編譯源代碼的平臺和執(zhí)行源代碼編譯后程序的平臺是同一個平臺。這里的平臺,可以理解為CPU架構(gòu)+操作系統(tǒng)。比如,在Intel x86架構(gòu)/Windows 10平臺下、使用Visual C++編譯生成的可執(zhí)行文件,在同樣的Intel x86架構(gòu)/Windows 10下運行。

3、交叉編譯

所謂"交叉編譯(Cross_Compile)",是指編譯源代碼的平臺和執(zhí)行源代碼編譯后程序的平臺是兩個不同的平臺。比如,在Intel x86架構(gòu)/Linux(Ubuntu)平臺下、使用交叉編譯工具鏈生成的可執(zhí)行文件,在ARM架構(gòu)/Linux下運行。

交叉編譯是相對復雜的,必須考慮如下幾個問題:

  • CPU架構(gòu):比如ARM,x86,MIPS等等;
  • 字節(jié)序:大端(big-endian)和小端(little-endian);
  • 浮點數(shù)的支持;
  • 應(yīng)用程序二進制接口(Application Binary Interface,ABI);
  • 為什么要使用交叉編譯呢?主要有兩個原因:

  • 交叉編譯的目標系統(tǒng)一般都是內(nèi)存較小、顯示設(shè)備簡陋甚至沒有,沒有能力在其上進行本地編譯;
  • 有能力進行源代碼編譯的平臺CPU架構(gòu)或操作系統(tǒng)與目標平臺不同;
  • 交叉編譯工具鏈是進行交叉編譯的必不可少的工具,是嵌入式開發(fā)人員必須熟練掌握的技能。我們會在后續(xù)文章中對交叉編譯工具鏈進行介紹。

    好了,關(guān)于交叉編譯就先介紹到這里。如果你喜歡這篇文章,可以去官網(wǎng)(https://www.founderchip.com)下載本文PDF版本。

    總結(jié)

    以上是生活随笔為你收集整理的ubuntu执行编译好的文件显示文件不存在_嵌入式开发 | 什么是交叉编译(CROSS_COMPILE)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。