① C語言,編譯成功,鏈接失敗。請教大佬解答
找不到char del(char*)函數的定義。檢查你是否定義了此函數,如果定義了那麼包含定義部分代碼的源文件是否位於工程的構建路徑中。
② C語言編譯程序屬於什麼軟體
是GCC。
GCC幾乎是unix及linux系統中最通用的編譯器套件,幾乎所有的linux發行版都預裝了GCC作為C語言的默認編譯器。除了對C語言的支持,GCC還支持C++、Objective-C等多種語言。GCC早在1987就由 Richard Stallman作為GNU計劃的一部分發布。
但其對C/C++標準的支持不亞於GCC等老牌編譯器,並且外部介面和GCC完全兼容,並且因其模塊化、錯誤提示完善等優點已經越來越受到重視。一些如FreeBSD等項目已將clang作為默認編譯器。
基本用法
在使用GCC編譯器的時候,必須給出一系列必要的調用參數和文件名稱。GCC編譯器的調用參數大約有100多個,這里只介紹其中最基本、最常用的參數。具體可參考GCC Manual。
GCC最基本的用法是∶gcc [options] [filenames]其中options就是編譯器所需要的參數,filenames給出相關的文件名稱。-c,只編譯,不鏈接成為可執行文件,編譯器只是由輸入的.c等源代碼文件生成.o為後綴的目標文件,通常用於編譯不包含主程序的子程序文件。
以上內容參考:網路-gcc
③ c程序設計中,編譯正確後,為什麼沒有建立起輸入鏈接
可能是你用的編程軟體需要手動把編譯好的文件進行鏈接
④ c語言程序,能編譯但不能連接,下面是3個文件,分開放,有高加分的
#include "predef.c"坦臘
typedef int ElemType;
#include "SqList.c
最好讓弊滑將predef.c SqList.c改為SqList.h頭文件卜銷後最形式
⑤ 計算機c語言 為什麼經過編譯就可以執行,沒有經過連接
C語言是通過編譯器與電腦進行交流。不用經過連接。
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言訂定了一套完整的國際標准語法,稱為ANSI C,作為C語言最初的標准。
⑥ gcc 只編譯不鏈接 (gcc -c *c source file*)的一個問題
那是因為你執行gcc -c ../a/a.c,生成新的a.o在b文件物蔽桐夾罩坦中了。並侍
gcc -c生成的.o,是在當前目錄下。
⑦ 關於c語言中變數有外部鏈接內部鏈接和無 鏈接怎麼理解
這部分內容是在程序的編譯和link層面談的。
一個大一些的工程往往不是只有一個程序文件,經常由好多C程序文件構成,有的時候裡面個別程序可能還用的其他語言,編碼完成後常常分別編譯,編譯完成再link到一起。某個C程序需要用到其他程序中定義過的變數,一般都加extern前綴,編譯時編譯器會預留訪問鏈接的空位,等到link階段再在整個工程的其他C編譯結果中去對號,把訪問鏈接填上。這就是外部鏈接。如果你程序全寫在一個文件里,那永遠都不會有外部鏈接。
內部鏈接常指一個程序文件中全局變數,可以被程序文件內各個子程序訪問,這在編譯過程中處理,和link階段不發生關系。如果變數前加了static,那麼它永遠不會被外部程序訪問,它不會被編譯程序寫入目標代碼的鏈接區。
無鏈接,就是在一個單體程序里,比如一個子程序,定義一個變數只給這個程序段用,那就是無鏈接。編譯器和link都不需要對這樣的變數做跨程序段的地址鏈接,這樣的變數都是直接分配寄存器或者近堆中的直接地址(每個子程序都有自己的基本存儲空間,被調用時得到分配,返回時被釋放,我習慣叫它近堆,標准叫啥早不記得了)。
變數是這樣,程序代碼段也大體差不多。每次在程序文件中調用一個文件內部的子程序,就產生一個內部鏈接;如果調用外部文件中的子程序,就產生一個外部鏈接。只有沒有任何子程序,所有代碼都寫在一個文件里的程序,才是無鏈接程序。
鏈接是個編譯和link層面的概念,所以不僅限於變數層面討論。
對了,再延伸,可以把一些子程序文件歸類,程序執行某部分任務才訪問,其他時間不訪問時,可以生成DLL。在程序執行那部分功能時,通過操作系統和DLL建立動態鏈接,當然這是外部鏈接,這也是程序設計中常用到的。這可以避免生成一個巨大的EXE,運行時吃掉過多的系統資源,還可以實現這個DLL中包含的子程序在操作系統級和其他程序共用。