[英]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.