簡體   English   中英

如何鏈接自定義靜態庫?

[英]How to link custom static library?

我正在制作一個靜態庫供我在c ++ OpenGL freeglut中制作游戲/模擬器時使用。 我稱這個庫為GLUtils。 它添加了struct Vectorstruct Color以及namespace 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?

此錯誤的原因可能是類型沖突引起的。

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

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

要解決此錯誤,您應該明確告訴鏈接器您要使用哪個定義,例如流。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM