2010-07-08 82 views
0

我正在修整在我的objective-c類中使用.c文件中的c函數。 我已經導入了c文件的標題。但我仍然有問題,我的程序不會編譯。c/objective-c問題

未定義符號:

「gluUnProject(浮動,浮動,漂浮,浮動常量*,浮子常量*,INT常量*,浮子*,浮子*,浮動*)」,從引用: - [GLView checkCollission:object:] in GLView.o ld:symbol(s)not found collect2:ld返回1退出狀態

任何想法如何解決這個問題? 任何幫助肯定是讚賞的。 Qutaibah

+2

只是檢查,你使用gluUnProject,你自己寫在你的iphone項目?默認情況下,iPhone不附帶glu。請參閱http://code.google.com/p/iphone-glu/ – 5ound 2010-07-08 21:05:49

回答

3

此錯誤由鏈接器發佈,而不是編譯器發佈。通常這是由編譯爲C的代碼引起的,並且是由C++或其他方式引起的。

可以通常通過確保在頭文件中的函數定義強制任何C++編譯器通過將使用C語法以下到報頭修正此:

#ifdef __cplusplus 
extern "C" { 
#endif 

... definitions goes here ... 

#ifdef __cplusplus 
} 
#endif 

這個方法也確保了.C文件本身將函數定義視爲C而不是偶然編譯爲C++。

如果您不想更改標頭,則可以用相同的方式封裝#include語句。但是,這不會確保.c文件本身的正確編譯。

編輯: 只是一個想法:我認爲你實際上正在編譯.c文件?

+0

謝謝克勞斯,在xCode中,我右鍵點擊'glu.c'並點擊編譯。 在爲glu.c文件的標題: 的#ifndef _GLU_H_ 的#define #ENDIF – user336994 2010-07-08 21:31:30

+0

你有沒有實際添加的glu.c文件到您的項目,所以它是構建的一部分_GLU_H_? – 2010-07-08 23:55:48

+0

是的,它顯示在組和文件窗格中。 順便說一句,我能夠使你的工作遵循你在上面的答案中提供的觀點。非常感謝你。 – user336994 2010-07-09 04:27:14