当我在c ++ OpenGL freeglut中制作游戏/模拟器时,我正在为自己创建一个静态库。我在调用这个库GLUtils。它添加struct Vector
和struct 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?
答案 0 :(得分:0)
此错误的原因可能是由类型冲突引入的。
void GL :: drawShape(Vector * points,ColorRGBA * colors,int size)
对于上面的函数声明,您希望使用在GLUtils中创建的结构定义,但链接器找到了已在其他库中定义并与之链接的结构名称,以便为您创建执行文件。
要解决此错误,您应该告诉链接器明确要使用哪个定义,例如flow。
void GL::drawShape(GL::Vector * points, GL::ColorRGBA * colors, int size)