導航:首頁 > 源碼編譯 > 編譯文件沒有定義

編譯文件沒有定義

發布時間:2023-05-15 07:21:24

㈠ 已經包含了頭文件,但編譯提示未定義變數的一種情況分析

ipc_mem.c 文件中 引用了 定義有con_conf_t結構體的 con_conf_info.h 頭文件,並且 ipc_mem.h 頭文件中聲明con_conf_t結構體變數,而 sample.c 引用了 頭文件 ipc_mem.h 了,但是編譯提示ipc_mem.h中未定義con_conf_t

所以,需要確認好別的文件中是否也需要包含相關頭文件,如果是,光禪做在一個賀鋒衡地方引用頭文件是不夠的。

如本次問題中基啟,ipc_mem.c中會用到con_conf_t結構體,而sample.c中雖然不會用到con_conf_t結構體,但是sample.c中包含了ipc_mem.h,而ipc_mem.h中又聲明了con_conf_t結構體變數,所以編譯到sample.c文件時,由於看到ipc_mem.h聲明了con_conf_t,但是編譯器不止知道con_conf_t是哪裡來的,所以會報錯。

要解決這個問題,只需要在sample.c再引用con_conf_info.h頭文件,再編譯即可。

㈡ 明明定義參數了,為什麼編譯說沒有定義

函數由兩部分組成:聲明部分和執行語句。聲明部分的作用是對有關的標識符(如變數、函數、結構體、共用體等)的屬性進行說明。對於函數,聲明和定義的區別明顯,函數的聲明是函數的原型,而函數的定義是函數功能的確立。對函數的聲明放在聲明部分中,函數的定義不在函數的聲明部分范圍內,是一個文件中的獨立模塊。對變數而言,聲明與定義的關系稍微復雜。聲明部分出現的變數有兩種情況:一種需要建立存儲空間的(如inta;);一種不需要建立存儲空間的(如externinta;)。前者稱為定義性聲明(definingdeclaration),簡稱為定義(definition)。後者稱為引用性聲明(referenceingdeclaration)。聲明包括定義,並非所有的聲明都是定義。對「inta;」而言,定義性聲明,建立存儲空間的聲明稱為定義,不需要建立存儲空間的聲明稱為聲明。指的聲明是狹義的,即非定義性聲明。例如:intmain(){externinta;//這是聲明不是定義。聲明a是一個已定義的外部變數}inta;//是定義,定義a為整型外部變數外部變數定義和外部變數聲明的含義不同。外部變數的定義一次,位置在所有函數之外,而同一文件中的外部變數的聲明可以有多次,位置可以在函數之內,也可在函數之外。系統根據外部變數的定義分配存儲單元。對外部變數的初始化只能在定義時進行,而不能在聲明中進行。所謂聲明,作用是向編譯系統發出一個信息,聲明該變數是一個在後面定義的外部變數,提前引用該變數而作的聲明。extern只用作聲明,而不用於定義。static來聲明一個變數的作用有二:對局部變數用static聲明,變數在本函數調用結束後不釋放,整個程序執行期間始終存在,使其存儲期為程序的全過程。全局變數用static聲明,變數的作用域只限於本文件模塊(即被聲明的文件中)。用auto,register,static聲明變數時,定義變數的基礎上加上關鍵字,不能單獨使用。

㈢ 已添加的類,在編譯時錯誤提示類沒有定義,這是什麼原因

具體睜塵需要看代碼
比睜搏較常見的幾個悉早祥原因
1 類定義在其它文件了,編譯的時候沒編進來
2 類定義有錯 導致系統沒識別到
3 在定義之前調用了該類。

㈣ 在頭文件里定義的函數在編譯時說未定義

void err_sys(const char *, ... );
這樣只是聲明了一下,沒有對其定義,當然會報錯,這個就相當於printf()的函數,只是它自己定義了一個新的,你去stdio.h頭文件里看看printf()怎麼定義的。

㈤ 編譯不了這個,提示printf沒有定義,該怎麼辦

(1)printf 定義在頭文件橋李虛 stdio.h 里。
(2)void 函數 不需要敏燃 return 語句擾早。
(3) 要有主函數 main() , 不是 mian()
寫成:
#include <stdio.h>
void add(int a,int b)
{
printf("data=%d\n",a+b);
}
void main()
{
add(3,4);
exit(0);
}

㈥ Linux下編寫c語言頭文件,編譯時出現「函數未定義」

出現該錯誤的原因為編譯時只變編譯了源文件的一部分,故在鏈接時無法從編譯好的目標代碼中找到print函數,所以出錯。


根據你的源文件結構,個人推薦先單獨編譯源文件為多個object文件,再統一鏈接。

方法如下

gcc-cmain.c#-c參數的作用是讓gcc只編譯,不鏈接
gcc-ctest.c
gcc-omainmain.otest.o#將編譯好的目標代碼鏈接

當然,以上是在gcc為編譯器的前提下執行,如使用clang等其他編譯器,方法類似(clang的調用方法與gcc高度兼容)

㈦ c編程中main函數中使用了庫文件中定義的函數,編譯時卻提示該函數未定義,這是什麼問題,坐等高手解答

原因:
頭文件 pthread.h 沒有包含態沖嘩到判慧源文件中
解決方法:
1)將 pthread.h 復制到源文件相同的文件夾
2)修改為:帆行#include "pthread.h"

閱讀全文

與編譯文件沒有定義相關的資料

熱點內容
java辦公自動化 瀏覽:340
php中超鏈接 瀏覽:253
linux默認路由設置 瀏覽:36
linux如何掛載iso 瀏覽:432
vs程序換文件夾後不能編譯 瀏覽:557
安卓源碼編譯輸入腳本沒反應 瀏覽:47
phpmysql自增 瀏覽:167
把ppt保存為pdf 瀏覽:533
汽車密封件加密配件 瀏覽:887
黑馬程序員15天基礎班 瀏覽:560
java調整格式 瀏覽:521
香港雲伺服器租用價 瀏覽:78
linuxsublime3 瀏覽:560
imac混合硬碟命令 瀏覽:277
沈陽用什麼app租房車 瀏覽:857
00後高中生都用什麼app 瀏覽:238
戴爾塔式伺服器怎麼打開獨立顯卡 瀏覽:807
醫療程序員招聘 瀏覽:597
住宿app可砍價是什麼意思 瀏覽:133
java跳出語句 瀏覽:55