国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux操作系統(tǒng)】編譯過(guò)程中遇到的問題-為什么加-c?執(zhí)行文件提示無(wú)法執(zhí)行二進(jìn)制文件?main函數(shù)參數(shù)argc和*argv[]的作用和理解?

這篇具有很好參考價(jià)值的文章主要介紹了【Linux操作系統(tǒng)】編譯過(guò)程中遇到的問題-為什么加-c?執(zhí)行文件提示無(wú)法執(zhí)行二進(jìn)制文件?main函數(shù)參數(shù)argc和*argv[]的作用和理解?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在使用GCC編譯器進(jìn)行程序開發(fā)時(shí),我們經(jīng)常會(huì)遇到一些編譯過(guò)程中的問題, 比如為什么要加上"-c"選項(xiàng),以及為什么生成的可執(zhí)行文件無(wú)法執(zhí)行等問題。
本篇博客將詳細(xì)介紹這些問題,并給出相應(yīng)的代碼和解釋,幫助讀者更好地理解GCC編譯過(guò)程中的"-c"選項(xiàng)和main函數(shù)的參數(shù)argc和*argv[]。
【Linux操作系統(tǒng)】編譯過(guò)程中遇到的問題-為什么加-c?執(zhí)行文件提示無(wú)法執(zhí)行二進(jìn)制文件?main函數(shù)參數(shù)argc和*argv[]的作用和理解?,操作系統(tǒng),linux,c語(yǔ)言,運(yùn)維

1. 為什么要加-c,-o?各元素表示什么關(guān)系

1.1 一個(gè)完整編譯命令各元素的解釋

我們使用一個(gè)例子說(shuō)明:

gcc -c hello.c -o hello

里面每個(gè)元素的含義:

  • "gcc":是GNU編譯器套裝(GCC)的命令行工具。
  • "-c":是GCC的一個(gè)編譯選項(xiàng),表示只進(jìn)行編譯而不進(jìn)行鏈接。使用該選項(xiàng)會(huì)生成一個(gè)目標(biāo)文件(.o文件),而不是可執(zhí)行文件。
  • "hello.c":是要編譯的源文件的名稱。這里的"hello.c"是一個(gè)示例文件名,可以替換為實(shí)際的源文件名。
  • "-o":是GCC的一個(gè)選項(xiàng),用于指定輸出文件的名稱。
  • "hello":是輸出文件的名稱。這里的"hello"是一個(gè)示例文件名,可以替換為實(shí)際的輸出文件名。

綜合起來(lái),命令"gcc -c hello.c -o hello"的含義是:

使用GCC編譯器對(duì)名為"hello.c"的源文件進(jìn)行編譯,生成一個(gè)目標(biāo)文件,并將該目標(biāo)文件命名為"hello"。
注意,該命令只進(jìn)行編譯而不進(jìn)行鏈接,因此生成的文件不是可執(zhí)行文件,而是目標(biāo)文件。如果想要生成可執(zhí)行文件,可以去掉"-c"選項(xiàng),即使用命令"gcc hello.c -o hello"。 這就是你的程序明明代碼是對(duì)的,但是運(yùn)行的時(shí)候報(bào)錯(cuò)的原因。
GCC(GNU Compiler Collection)是一套由GNU開發(fā)的編譯器工具集,用于編譯C、C++、Objective-C、Fortran、Ada等多種編程語(yǔ)言。

據(jù)此我們可以學(xué)習(xí) g c c 其他的選項(xiàng): \color{red}{據(jù)此我們可以學(xué)習(xí)gcc其他的選項(xiàng):} 據(jù)此我們可以學(xué)習(xí)gcc其他的選項(xiàng):

1.2 gcc其他的選項(xiàng)

  1. -c:只編譯源文件,生成目標(biāo)文件,不進(jìn)行鏈接。
  2. -o :指定輸出文件的名稱。
  3. -g:在目標(biāo)文件中生成調(diào)試信息,以便進(jìn)行調(diào)試。
  4. -O:指定優(yōu)化級(jí)別。例如,-O0表示不進(jìn)行優(yōu)化,-O1表示基本優(yōu)化,-O2表示更高級(jí)別的優(yōu)化。
  5. -Wall:顯示所有警告信息。
  6. -Werror:將所有警告視為錯(cuò)誤。
  7. -I < dir >:指定頭文件的搜索路徑。
  8. -L < dir >:指定庫(kù)文件的搜索路徑。
  9. -l :鏈接時(shí)使用的庫(kù)文件。
  10. -D :定義宏。
  11. -E:只進(jìn)行預(yù)處理,生成預(yù)處理后的源代碼。
  12. -S:只進(jìn)行編譯,生成匯編代碼。
  13. -shared:生成共享庫(kù)文件。
  14. -static:生成靜態(tài)鏈接的可執(zhí)行文件。
  15. -pthread:鏈接多線程庫(kù)。

2. 為什么報(bào)錯(cuò)“無(wú)法執(zhí)行二進(jìn)制文件,可執(zhí)行文件格式錯(cuò)誤”

2.1 報(bào)錯(cuò)的普遍原因

原因可能有以下幾種: \color{red}{原因可能有以下幾種:} 原因可能有以下幾種:

  • 缺少可執(zhí)行權(quán)限:使用"chmod +x <filename>"命令為文件添加可執(zhí)行權(quán)限。
  • 編譯時(shí)未加上"-o"選項(xiàng)指定輸出文件名:確保在編譯時(shí)使用了"-o"選項(xiàng),并指定了輸出文件名。
  • 編譯時(shí)未加上"-c"選項(xiàng):如果只進(jìn)行了編譯而沒有進(jìn)行鏈接,生成的目標(biāo)文件無(wú)法直接執(zhí)行。需要在編譯時(shí)加上"-c"選項(xiàng)來(lái)只生成目標(biāo)文件,然后進(jìn)行鏈接操作生成可執(zhí)行文件。

一般都是編譯的時(shí)候帶了-c的參數(shù),導(dǎo)致沒有進(jìn)行鏈接,無(wú)法執(zhí)行,那為什么要帶上-c選項(xiàng)呢?

2.2 編譯時(shí)帶上-c的作用

GCC編譯器提供了"-c"選項(xiàng),用于只進(jìn)行編譯而不進(jìn)行鏈接。這樣做的好處是可以提高編譯速度和靈活性。在大型項(xiàng)目中,當(dāng)我們只對(duì)部分源文件進(jìn)行更改時(shí),只需要重新編譯這些源文件,而不需要重新鏈接整個(gè)項(xiàng)目。下面是一個(gè)示例代碼:

// main.c
#include <stdio.h>

int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(10, 20);
    printf("Result: %d\n", result);
    return 0;
}

假設(shè)我們對(duì)add函數(shù)進(jìn)行了修改,我們只需要重新編譯main.c文件即可:

gcc -c main.c

這樣會(huì)生成一個(gè)名為main.o的目標(biāo)文件,然后我們可以將其與其他目標(biāo)文件進(jìn)行鏈接,生成最終的可執(zhí)行文件。

3.main函數(shù)帶上argc和*argv[]兩個(gè)參數(shù)的作用

在C語(yǔ)言中,main函數(shù)是程序的入口函數(shù),它可以接受命令行傳遞的參數(shù)。main函數(shù)的參數(shù)有兩個(gè):argc和*argv[]。

  • argc(argument count) 是一個(gè)整數(shù),表示命令行參數(shù)的數(shù)量。它包括程序本身的名稱作為第一個(gè)參數(shù)。
  • *argv[](argument vector) 是一個(gè)指向指針數(shù)組的指針,其中每個(gè)指針指向一個(gè)命令行參數(shù)的字符串。argv[0]指向程序的名稱,argv[1]指向第一個(gè)命令行參數(shù),以此類推。

通過(guò)使用這兩個(gè)參數(shù),我們可以在程序中獲取和處理命令行傳遞的參數(shù)。下面是一個(gè)示例代碼:

// main.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Number of arguments: %d\n", argc);
    printf("Program name: %s\n", argv[0]);
    
    for (int i = 1; i < argc; i++) {
        printf("Argument %d: %s\n", i, argv[i]);
    }
    
    return 0;
}

假設(shè)我們?cè)诿钚兄袌?zhí)行以下命令:

./main arg1 arg2 arg3

輸出結(jié)果將會(huì)是:

Number of arguments: 4
Program name: ./main
Argument 1: arg1
Argument 2: arg2
Argument 3: arg3

通過(guò)使用argc*argv[],我們可以根據(jù)不同的命令行參數(shù)執(zhí)行不同的操作,從而實(shí)現(xiàn)程序的靈活性。

結(jié)論:

本篇博客詳細(xì)介紹了GCC編譯過(guò)程中的"-c"選項(xiàng)和main函數(shù)的參數(shù)argc*argv[]的作用和理解。通過(guò)加上"-c"選項(xiàng),我們可以只進(jìn)行編譯而不進(jìn)行鏈接,提高編譯速度和靈活性。同時(shí),我們還了解了main函數(shù)參數(shù)argc*argv[]的作用,以及如何在程序中獲取和處理命令行傳遞的參數(shù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-654911.html

到了這里,關(guān)于【Linux操作系統(tǒng)】編譯過(guò)程中遇到的問題-為什么加-c?執(zhí)行文件提示無(wú)法執(zhí)行二進(jìn)制文件?main函數(shù)參數(shù)argc和*argv[]的作用和理解?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 杭電操作系統(tǒng)實(shí)驗(yàn)一 --- Linux內(nèi)核編譯及添加系統(tǒng)調(diào)用(arm架構(gòu)華為云)

    杭電操作系統(tǒng)實(shí)驗(yàn)一 --- Linux內(nèi)核編譯及添加系統(tǒng)調(diào)用(arm架構(gòu)華為云)

    掌握Linux 內(nèi)核的編譯與安裝 掌握Linux 系統(tǒng)調(diào)用基本概念 設(shè)計(jì)和添加linux系統(tǒng)調(diào)用 ????????(1)修改或返回指定進(jìn)程的優(yōu)先級(jí)(nice值和prio值)(詳見教材P328)提示:可能參考的內(nèi)核函數(shù):set_user_nice(). ????????(2)改變主機(jī)名稱為自定義字符串(自選題目) ? 1、 L

    2023年04月20日
    瀏覽(25)
  • Linux更新操作系統(tǒng)Openssh版本9.3p1(源碼編譯安裝)

    安裝依賴 yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel yum install -y pam* zlib* openssh-9.3p1.tar.gz openssl-3.1.0.tar.gz 備份文件 cp /etc/pam.d/sshd /etc/pam.d/sshd.bak 解壓安裝包 tar zxvf openssl-3.1.0.tar.gz cd openssl-3.1.0 備份舊Openssl mv /usr/bin/openssl /usr/bin/openssl_old mv /usr/include/

    2024年02月12日
    瀏覽(35)
  • 【JAVA】云HIS系統(tǒng)使用和操作過(guò)程中的常見問題及解決方法

    【JAVA】云HIS系統(tǒng)使用和操作過(guò)程中的常見問題及解決方法

    一、門診業(yè)務(wù)中遇到的問題 (1)門診醫(yī)生如何查詢往期病人? 答: 點(diǎn)擊門診醫(yī)生站左側(cè)患者列表,在彈出的頁(yè)面點(diǎn)擊已診分頁(yè),在搜索框輸入患者姓名,在結(jié)果中找到對(duì)應(yīng)患者,點(diǎn)擊詳情按鈕即可查詢患者往期就診信息,點(diǎn)擊想要查詢的門診記錄前方的方框即可查詢相應(yīng)的

    2024年02月16日
    瀏覽(32)
  • 【linux深入剖析】操作系統(tǒng)與用戶之間的接口:自定義簡(jiǎn)易shell制作全過(guò)程

    【linux深入剖析】操作系統(tǒng)與用戶之間的接口:自定義簡(jiǎn)易shell制作全過(guò)程

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫(kù)等等一系列知識(shí) ??感謝你的陪伴與支持 ,故事既有了開頭,就要畫上一個(gè)完美的句號(hào),讓我們一起加油 Linux的Shell是一種命令行解釋器,它是用戶與操作系統(tǒng)內(nèi)核之間的接口。 通過(guò)Shell,用戶可以輸入命令并與

    2024年03月18日
    瀏覽(32)
  • 如何在Windows、Mac和Linux操作系統(tǒng)上安裝Protocol Buffers(protobuf)編譯器

    如何在Windows、Mac和Linux操作系統(tǒng)上安裝Protocol Buffers(protobuf)編譯器

    ???? 博主貓頭虎 帶您 Go to New World.??? ?? 博客首頁(yè)——貓頭虎的博客?? ??《面試題大全專欄》 文章圖文并茂??生動(dòng)形象??簡(jiǎn)單易學(xué)!歡迎大家來(lái)踩踩~?? ?? 《IDEA開發(fā)秘籍專欄》學(xué)會(huì)IDEA常用操作,工作效率翻倍~?? ?? 《100天精通Golang(基礎(chǔ)入門篇)》學(xué)會(huì)Golang語(yǔ)言

    2024年02月11日
    瀏覽(27)
  • Linux操作系統(tǒng)實(shí)驗(yàn):生產(chǎn)者和消費(fèi)者問題

    Linux操作系統(tǒng)實(shí)驗(yàn):生產(chǎn)者和消費(fèi)者問題

    “生產(chǎn)者消費(fèi)者”問題是一個(gè)著名的同時(shí)性編程問題的集合。通過(guò)編寫經(jīng)典的”生產(chǎn)者消費(fèi)者”問題的實(shí)驗(yàn),讀者可以進(jìn)一步熟悉 Linux 中多線程編程,并且掌握用信號(hào)量處理線程間的同步互斥問題。 VMware Workstation Pro “生產(chǎn)者消費(fèi)者”問題描述如下。 有一個(gè)有限緩沖區(qū)和兩

    2024年02月06日
    瀏覽(37)
  • 嵌入式Linux交叉編譯過(guò)程中遇到”cannot execute ‘cc1plus‘:execvp:No such file or directory“問題的解決方法

    嵌入式Linux交叉編譯過(guò)程中遇到”cannot execute ‘cc1plus‘:execvp:No such file or directory“問題的解決方法

    今天又是遇到問題的一天,耗時(shí)兩小時(shí)(因?yàn)檎医鉀Q方法的過(guò)程中遇到了較多麻煩)。 問題的起因是我在編譯T113-S3_100ask開發(fā)板驅(qū)動(dòng)程序的過(guò)程中,突然中斷報(bào)錯(cuò)了,錯(cuò)誤如下圖所示。 由于我也是剛接觸嵌入式linux驅(qū)動(dòng)編寫,所以,對(duì)于一些問題看得不是很懂。所以,我選擇

    2024年02月07日
    瀏覽(30)
  • 安裝ROS操作系統(tǒng)中遇到的【無(wú)法獲得鎖 /var/lib/dpkg/lock-frontend - open (11: 資源暫時(shí)不可用。無(wú)法獲取 dpkg 前端鎖 (/var/lib/.....】問題

    安裝ROS操作系統(tǒng)中遇到的【無(wú)法獲得鎖 /var/lib/dpkg/lock-frontend - open (11: 資源暫時(shí)不可用。無(wú)法獲取 dpkg 前端鎖 (/var/lib/.....】問題

    在臺(tái)式虛擬機(jī)ubunut上安裝ROS機(jī)器人操作系統(tǒng)出現(xiàn)的問題,按照ROS 安裝步驟 安裝到命令sudo apt install ros-melodic-desktop-full時(shí),出現(xiàn)下面問題: 參考鏈接:https://blog.csdn.net/diaodaa/article/details/104516036 按照上述作者的步驟檢測(cè)進(jìn)程,輸入: 執(zhí)行結(jié)果如下所示: 并殺死相關(guān)進(jìn)程: 接下

    2024年02月16日
    瀏覽(21)
  • 游戲服務(wù)器搭建過(guò)程中Maven多模塊編譯遇到的一些問題

    游戲服務(wù)器搭建過(guò)程中Maven多模塊編譯遇到的一些問題

    ???????? 目錄 1、多模塊的創(chuàng)建 1.1 父模塊的創(chuàng)建 ?1.2 刪除垃圾文件 1.3 修改pom.xml 1.4 創(chuàng)建子模塊繼承 2、子模塊之間的互相引用 3、多個(gè)模塊間版本的管理 3.1?dependencis 3.2?dependencyManagement 4、依賴執(zhí)行 5、在Spring Boot項(xiàng)目中加載依賴項(xiàng)目的組件有幾種常用的方法 5.1. 使用@

    2024年02月15日
    瀏覽(25)
  • 電腦開機(jī)操作系統(tǒng)引導(dǎo)過(guò)程

    電腦開機(jī)操作系統(tǒng)引導(dǎo)過(guò)程

    電腦開機(jī)時(shí)操作系統(tǒng)引導(dǎo): CPU首先執(zhí)行主存中ROM中的引導(dǎo)程序。 將磁盤的第一塊——主引導(dǎo)記錄(MBR)讀入到內(nèi)存中,執(zhí)行磁盤引導(dǎo)程序,掃描分區(qū)表。 在主分區(qū)(C盤)執(zhí)行分區(qū)引導(dǎo)程序。 在C盤根目錄下找到完整的操作系統(tǒng)初始化程序并執(zhí)行。 ?

    2024年02月10日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包