2017-09-26 102 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)