2011-07-22 111 views
1

我有一種情況。我在用extern關鍵字聲明的頭文件中有一些函數。我有他們的定義在一個C文件。這兩個文件位於相同的目錄中。我製作了一個visual studio項目幷包含頭文件。當我使用在頭文件中聲明的函數。該程序給我鏈接錯誤(LNK2019)。我在包含其他目錄中插入包含頭文件和C文件的目錄的路徑。但問題仍然存在。我該如何解決這個問題?C程序鏈接錯誤?

謝謝

+0

您是否將文件包含到解決方案中? – Jeeva

+0

哪個文件,Header或C?我是否應該將它們包含在項目目錄中的項目中? –

+0

嘗試在解決方案中包含頭文件 – Jeeva

回答

0

感謝大家。我發現這個問題,但上面的答案也非常有幫助。問題是我正在調用那些定義在.c文件中的函數。但我在我的.cpp文件中調用它。這是造成這個錯誤的原因。我將.cpp文件的擴展名更改爲.c文件,現在它工作正常。 Thnaks

0

函數不需要用extern關鍵字聲明。這是多餘的。

您的錯誤消息告訴你,你定義的函數之一(不僅僅是聲明)引用了一個extern變量,而是聲明該變量的源文件(即,它在沒有extern關鍵字的情況下被聲明的地方)是不被鏈接。

+0

源文件中的函數不使用除本地變量之外的任何變量。我試着評論整個功能代碼。但它不起作用。 –

0

您是否將包含函數定義的C源文件包含到Visual Studio項目文件中?我相信鏈接器抱怨找不到函數定義

+0

我認爲你是對的。確切地說,誰抱怨'找不到定義'是鏈接器而不是編譯器。編譯器可能會在「聲明」中抱怨問題。 – Stan

+0

哈哈,是的,你是對的,它是抱怨的連接器。我應該說得更清楚。更新了我的答案 – wschang

0

重要的是將.c文件添加到項目/解決方案。這就是項目的目的:引用所有必要的實現文件(即.c文件)。顯然,你沒有那樣做。因此錯誤。

您不需要將標頭文件(即.h文件)添加到項目/解決方案。標題文件通常會添加到項目中以獲得純粹的便利,以便您可以在同一位置查看它們。否則,這是完全沒有必要的。

0

假設xx.h(你包括prog.c其中)和xx.cC:\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中,正如其他人所說的,只需將源文件添加到您的項目。右鍵單擊項目瀏覽器中的項目,「添加...」,「現有元素...」(或英語類似),然後瀏覽至該文件。