假設你的程序由兩個源文件(main.c和auxiliary.c)和兩個頭文件(declarations.h和auxiliary.h)組成。關於GCC編譯器和鏈接器的問題
然後你運行編譯如下:
$gcc main.c auxiliary.c -o myprogram
問題1:請問編譯器創建一個單一的目標文件爲我的計劃(即,只是庫丟失),還是會創建兩個對象文件,每個源文件一個(然後將所有內容鏈接在一起)?
問題2:有沒有必要單獨調用鏈接器?因爲如果你使用上面的命令,編譯器會爲你處理這個問題,對吧?
問題3爲什麼一些庫自動鏈接(例如,stdio)以及爲什麼一些庫需要額外的工作(例如,math.h需要在編譯時添加-lm)。 -lm代表什麼?
問題4:假設你有一個源文件,並且你的程序不需要任何外部庫。這是否意味着您將從編譯器獲得的對象代碼已經可執行了? (即,編譯它像$ gcc -c main.c)。
這東西是特定於每個實現。像使用「C」和「編譯器」這樣的通用標籤來標記它並不合適,就像引用「the」C編譯器一樣。 –
同意。我重新命名爲「有關GCC編譯器的問題」 –