簡體   English   中英

在Linux中運行C程序

[英]Running a C program in Linux

有人可以向我解釋為什么,特別是我們使用./a.out來運行程序?

這背后有什么意義嗎?

有人可以提供解釋嗎?

該名稱代表“匯編器輸出” ,並且(並且仍然是)編譯器生成的可執行文件的默認名稱。 你需要./的原因是因為當前目錄( . )不在$PATH因此必須明確給出可執行文件的路徑。

如果你的意思是./部分,那就是為了安全。 Windows默認情況下將當前目錄附加到PATH,這是不好的(存在DLL注入的風險,依此類推)。 如果你的意思是a.out部分,它只是一個名稱(來自格式a.out的名稱),你可以通過修改gcc -o參數來改變它。

當像bash這樣的shell運行可執行文件時,可執行文件必須位於PATH環境變量中,以便bash找到並運行該程序。

./前綴是指定可執行文件的完整路徑的簡寫方式,因此bash不需要查詢PATH變量(通常不包含當前目錄)來運行它。

[對於a.out (“匯編程序輸出”的縮寫),如果沒有指定輸出文件名,它是gcc編譯器的默認可執行輸出。

值得你多看一下C和C程序的編譯方式

本質上,您的源代碼被發送到預處理器 ,其中加載了#define#include等指令(例如,加載到內存中)。 因此,您要使用的任何庫都會被加載,例如

#include <math.h>

基本上將math.h的內容“粘貼”到源代碼中定義它的位置。

一旦擴展了所有這些東西, 編譯器就會將您的源代碼轉換為目標代碼 ,這是二進制代碼的源代碼。 如果未指定構建名稱,則a.out是輸出的默認名稱。

gcc -o mynewprogram mynewprogram.c

a.out是編譯器的默認名稱。 AFAIK是因為跳過了鏈接過程而且它沒有被編譯為對象或庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM