2017-09-26 87 views
0

我正在爲自己製作一個靜態庫供我在C++ OpenGL Freeglut中製作遊戲/模擬器時使用。我打電話給這個圖書館GLUtils。它增加了struct Vectorstruct Colornamespace GL,其中包含諸如void GL::drawShape(Vector *points, Color *colors, int size)等的方法。我正在用Visual Studio 2017中的freeglut的靜態版本編譯GLUtils,它編譯得很好,當我編譯我的測試用法時,它編譯得很好,當我運行它時,它工作正常,直到我添加了opengl的東西。該測試仍然編譯好,但它與Application failed to start properly加載時崩潰,當我去調試它,崩潰之前main被加載。使用Dependency Walker並打開test.exe,唯一顯示紅色的是freeglut.dll下的kernel32.dll,但kernel32.dll依賴項已滿足,並且GLUtils.lib不在列表中(但我認爲這是因爲它是靜態的)。如何鏈接自定義靜態庫?

即使當我註釋掉GLUtils.cpp的實現並保持身體作爲

void GL::drawShape(Vector * points, ColorRGBA * colors, int size) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     //glColor4f(colors[i].r, colors[i].g, colors[i].b, colors[i].a); 
     //glVertex3f(points[i].x, points[i].y, points[i].z); 
    } 
} 

將Test.exe仍用同樣的錯誤崩潰。

我如何將GLUtils.lib和freeglut.lib鏈接到Test.exe?

+0

使用#pragma評論(LIB, 「GLUtils.lib」),並做freeglut太 – Asesh

+0

相同的Test.cpp的或我使用什麼文件?在添加opengl之前,我不必那樣做。 –

+0

您的測試項目應鏈接到這些庫。所以它放在哪個文件中並不重要 – Asesh

回答

0

此錯誤的原因可能是由類型衝突引入的。

無效GL :: drawShape(矢量*點,ColorRGBA *色彩,詮釋大小)

對於上述函數的聲明,你想用你在GLUtils創建的結構定義,但鏈接找到那些已經在其他庫中定義的結構名稱並與它們鏈接以爲您創建執行文件。

爲了解決這個錯誤,你應該告訴鏈接器明確你想要使用哪個定義,比如流動。

void GL::drawShape(GL::Vector * points, GL::ColorRGBA * colors, int size)