VS2017下OpenGL链接问题求助:未解析符号gluPerspective
嘿,这个LNK2028未解析符号的问题我之前在VS2017里搞OpenGL的时候也踩过坑,给你几个靠谱的排查方向:
确认GLU库已正确添加到链接器
gluPerspective是GLU库的专属函数,不是基础OpenGL库的内容,所以你需要在项目属性的链接器->输入->附加依赖项里添加glu32.lib(注意是glu32.lib,别和opengl32.lib搞混了)。同时要确保链接器的附加库目录里包含了GLU库所在的路径(比如你用的OpenGL SDK的lib文件夹)。修复C++名字修饰问题
错误里的?gluPerspective@@$$J0YAXNNNN@Z是C++编译器对函数名进行修饰后的结果,但GLU库是用C语言导出的符号,这就导致了符号匹配失败。解决方法是把OpenGL相关头文件用extern "C"包裹:extern "C" { #include <GL/gl.h> #include <GL/glu.h> }这样编译器就会按照C语言的规则处理这些函数的名字,不会生成C++风格的修饰名。
检查项目平台与库的匹配性
如果你项目的平台是x86,那必须链接32位的GLU库;如果是x64,就要用64位的库。别把平台和库的位数搞混,这也是常见的符号不匹配原因。可以在项目属性的配置管理器里确认当前平台,再对应检查库的位数。处理CLR项目的特殊情况
从错误信息里的__clrcall可以看出,你的项目是CLR(公共语言运行时)项目。这种项目的函数调用约定和普通C项目不同,容易导致符号不匹配。如果你的项目不需要CLR支持,可以右键项目->属性->配置属性->C/C->所有选项->公共语言运行时支持,改成“无公共语言运行时支持”;如果必须用CLR,那要确保你链接的GLU库是兼容CLR的版本。
内容的提问来源于stack exchange,提问作者Paus Dederde

