A. gcc編譯文件失敗,提示undifined reference to「函數名」。原因是連接相應的庫文件失敗,如何連接庫文件
把代碼和命令貼上
B. 如何解決gcc版本沖突
我運行 ./configure --prefix=/usr/local/gcc-2.95.3 --host=localhost --enable-threads=posix --disable-checking --enable--long-long --enable-languages=c,c++,java --with-system-zlib
提示
Created "Makefile" in /root/gcc-2.95.3
/tmp/cONf24065.pos: line 7: cc: command not found
*** The command 'cc -o conftest -g conftest.c' failed.
*** You must set the environment variable CC to a working compiler.
坐等高幫忙
我linux內核版本GCC版本信息: Linux version 2.4.20-8 (bhcompile@porky.devel.redhat.com) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #1 Thu Mar 13 17:54:28 EST 2003 我現想gcc升級4.1.2版本誰知道造編譯器內核兼容升級誰知道該何升級我gcc所版本源碼沒二進制文件
C. gcc編譯,出現錯誤:expected 『=』, 『,』, 『;』, 『asm』 or 『__attribute__』 before ........
有時候我們編譯一個大的項目的時候,會出現很多錯誤使得屏幕堆滿了很多無用的信息。一般情況下我們需要找到首次出現錯誤的地方,在gcc中添加編譯選項可以使編譯停止在第一次出現錯誤的地方:
$ gcc -Wfatal-errors foo.c // GCC 4.0 and later$ g++ -Wfatal-errors foo.cpp
$ g++ -fmax-errors=N foo.cpp // 在出現第 N 此錯誤的時候停止編譯,GCC 4.6 and later
D. linux下用gcc編譯c出現的一些問題,請指教
你做 make 的時候,它會用預先設計好的命令來編譯,連接源代碼.你現在直接 "gcc pdf2swf.c" 就是假定整個程序只有這么一個源文件,沒有非標准庫.估計不大可能.很明顯,源文件至少還有一個 init.c.
既然你已經能做 configure, make 和 make install,不知道為什麼還要 gcc pdf2swf.c?
要用 gdb, make 的時候就必須帶有 debug 信息, g++ 是 -g, gcc 不太清楚, 打 gcc --help 查一下. 另外, make 做完後,源文件不能刪掉/移動,否則 gdb 就找不到了.
------------------
configure 會生成一個 Makefile, 打開後找 CCFLAG (通常是這個變數), 加上 -g 後再做 make 應該可以產生 debug 信息.你可以試試看.
E. Linux下編寫c語言頭文件,編譯時出現「函數未定義」
出現該錯誤的原因為編譯時只變編譯了源文件的一部分,故在鏈接時無法從編譯好的目標代碼中找到print函數,所以出錯。
根據你的源文件結構,個人推薦先單獨編譯源文件為多個object文件,再統一鏈接。
方法如下
gcc-cmain.c#-c參數的作用是讓gcc只編譯,不鏈接
gcc-ctest.c
gcc-omainmain.otest.o#將編譯好的目標代碼鏈接
當然,以上是在gcc為編譯器的前提下執行,如使用clang等其他編譯器,方法類似(clang的調用方法與gcc高度兼容)
F. Linux下 gcc編譯提示錯誤,,在函數_start中 main 未定義的引用
你是不是在編譯靜態庫或者動態庫?也就是沒有main函數。如果是,再參考一下下邊的提示。
-c 參數表示將源文件編譯成object(目標文件)。 即 gcc -c foo.c 會編譯成 foo.o
gcc 不加參數時會編譯且嘗試鏈接成可執行文件,然而 foo.c 的代碼中沒有main函數的定義,所以最終無法成功鏈接,故報錯。
G. 請問 linux下gcc編譯.c文件出現undefined reference to `stop'的錯誤是為什麼stop為自定義函數
~~~~這個沒記錯的話是鏈接的錯誤
跟include應該沒關系(當然還是建議你加上-c參數只編譯不鏈接看看還有沒有錯)
然後就是你的stop是定義在同一個文件里的么?
如果不是的話就要把兩個文件一起編譯(其實是一起鏈接)(你應該沒有吧stop函數編成一個庫吧~~~)
如果是的話那最好查一下參數類型寫對沒有,然後就是大小寫是不是對的,
如果還不行的話麻煩把代碼貼上來方便查錯
H. 關於gcc 編譯的問題
對於未聲明的函數,編譯器會默認的聲明被調用函數返回值為int, 你可以加入 -Wall 參數來打開所有的編譯告警,比如
gcc -Wall 1.c 2.c 仍然能編譯通過,但是會告訴你2.c里有未聲明的函數。
printf也是類似的被編譯器用默認的函數聲明了。
gcc鏈接的時候會自動鏈接glibc的,printf函數就在glibc里。但是如果你要使用其他庫中的函數,比如開平方的sqrt函數是math庫的函數,用它就必須在gcc的時候加入鏈接這些庫的參數,比如
gcc -lm 就會鏈接 math庫
頭文件的作用是提供函數原型聲明,以及各種類型聲明,常量定義等,是用在「編譯」時刻的,而最終產生程序的庫鏈接則是屬於「鏈接」階段的東西,與頭文件無關。
I. gcc編譯錯誤
用gcc進行編譯必須用#include 「stdio.h」命令。
另外請問你用的是什麼版本的linux,我用ubuntu寫了命令也有這樣的錯誤
但是用redhat5.4企業版加了上述命令後就沒問題了
J. 運行gcc編譯器出現問題
返回碼是1,,就說明你調用了無效的dos功能號。還有就是你的那個「winmain」函數沒有定義。