我有一種情況。我在用extern關鍵字聲明的頭文件中有一些函數。我有他們的定義在一個C文件。這兩個文件位於相同的目錄中。我製作了一個visual studio項目幷包含頭文件。當我使用在頭文件中聲明的函數。該程序給我鏈接錯誤(LNK2019)。我在包含其他目錄中插入包含頭文件和C文件的目錄的路徑。但問題仍然存在。我該如何解決這個問題?C程序鏈接錯誤?
謝謝
我有一種情況。我在用extern關鍵字聲明的頭文件中有一些函數。我有他們的定義在一個C文件。這兩個文件位於相同的目錄中。我製作了一個visual studio項目幷包含頭文件。當我使用在頭文件中聲明的函數。該程序給我鏈接錯誤(LNK2019)。我在包含其他目錄中插入包含頭文件和C文件的目錄的路徑。但問題仍然存在。我該如何解決這個問題?C程序鏈接錯誤?
謝謝
感謝大家。我發現這個問題,但上面的答案也非常有幫助。問題是我正在調用那些定義在.c
文件中的函數。但我在我的.cpp
文件中調用它。這是造成這個錯誤的原因。我將.cpp文件的擴展名更改爲.c文件,現在它工作正常。 Thnaks
函數不需要用extern關鍵字聲明。這是多餘的。
您的錯誤消息告訴你,你定義的函數之一(不僅僅是聲明)引用了一個extern變量,而是聲明該變量的源文件(即,它在沒有extern關鍵字的情況下被聲明的地方)是不被鏈接。
源文件中的函數不使用除本地變量之外的任何變量。我試着評論整個功能代碼。但它不起作用。 –
重要的是將.c
文件添加到項目/解決方案。這就是項目的目的:引用所有必要的實現文件(即.c
文件)。顯然,你沒有那樣做。因此錯誤。
您不需要將標頭文件(即.h
文件)添加到項目/解決方案。標題文件通常會添加到項目中以獲得純粹的便利,以便您可以在同一位置查看它們。否則,這是完全沒有必要的。
假設xx.h
(你包括prog.c
其中)和xx.c
在C:\dev\c\libx
:
cl /I C:\dev\c\libx prog.c C:\dev\c\libx\xx.c
cl /I C:\dev\c\libx prog.c /link /LIBPATH:C:\dev\c\libx xx.obj
同樣的故事,如果你有一個LIB
而不是OBJ
。
在Visual Studio中,正如其他人所說的,只需將源文件添加到您的項目。右鍵單擊項目瀏覽器中的項目,「添加...」,「現有元素...」(或英語類似),然後瀏覽至該文件。
您是否將文件包含到解決方案中? – Jeeva
哪個文件,Header或C?我是否應該將它們包含在項目目錄中的項目中? –
嘗試在解決方案中包含頭文件 – Jeeva