2012-09-14 102 views
2

我想在我創建的程序中使用GLEW,但是我的編譯器不會編譯它,而是會在此行上引發大量錯誤gcc -g -c glew.c -o glew.o。這是我的的Makefile基於GLEW的程序不能編譯

MY_LIBS = 
glewex: glew.o main.o glew.h 
    g++ main.o glew.o glew.h -o glewex $(MY_LIBS) 
glew.o: glew.c 
    gcc -g -c glew.c -o glew.o 
main.o: main.cpp 
    g++ -g -c main.cpp -o main.o 

它簡單地輸出數百個錯誤的認爲是這樣的:

__glewActiveTexture重新聲明時沒有dllimport屬性:以前進口忽略[-Wattributes]

回答

4

試試這個:

gcc -g -DGLEW_STATIC -c glew.c -o glew.o 

這應該防止DLL導入/導出裝飾被添加到聲明中。

+0

它停在我前面的錯誤,但現在我得到噸的錯誤,看起來像這樣:未知的名稱類型'PFNGLBUFFERREGIONENABLEDEXTPROC'警告:初始化從指針沒有投射整數[默認啓用] – imkendal

+0

實際上,而不是''D'搞砸'#define GLEW_STATIC'在'glew.h'中'#define __GLEW_H__'之後。 – genpfault

+0

另外,您需要繼續使用'-DGLEW_STATIC'編譯其他源文件。無論何時你的其他文件包含'#include'任何GLEW頭文件,你都要確保每次都有相同的'#define'影響它。 – TheBuzzSaw

-2

您不想將庫源文件添加到項目的編譯器輸入中。您應該將庫添加到鏈接器輸入列表中;靜態(libglew.a)或動態(-lglew)。

I.e.無論是

gcc -o … -lglew 

gcc -o … libglew.a 

當鏈接GLEW靜態必須添加-DGLEW_STATIC到編譯器選項生成編譯單元(.o文件)

+0

恰恰相反。你想把源文件添加到你的項目中。使用外部庫會使構建複雜化,並將構建永久綁定到庫的特定版本/體系結構/發行版/編譯器。由於GLEW有一個友好的許可證,它是100%值得它只是編譯它。 – TheBuzzSaw

+0

@ TheBuzzSaw:沒有。如果您擔心分發問題,請將該庫作爲外部依賴項整合到項目的構建過程中。只包括源文件會導致很多問題,因爲您通常會有一個額外的預構建配置步驟,這將被完全繞過。作爲一個例子,下載Blender源文件分發。所有第三方庫都包含在內,但在項目構建過程中將其構建爲真正的庫。 「編譯」意味着除了「靜態鏈接」之外沒有別的意思,但是應該在正確構建庫的情況下完成。 – datenwolf

+0

如果你只包含裸源文件,那麼最終會遇到很大的麻煩。遲早(實際上更早)。 – datenwolf