我正在尝试将我的程序作为发布版本发布。我切换到发布模式,然后我的* .h文件坏了。
#include "GL\glew.h"
#include "GLFW\glfw3.h"
#include "ft2build.h"
#include "FTGL\ftgl.h"
//#include "GL/glew.h"
//#include <GLFW/glfw3.h>
//#include <ft2build.h>
//#include <FTGL/ftgl.h>
以上我已经包括在内。两个集都会导致以下错误:
1&gt; C:\ Users \ student \ Documents \ VSTest \ hw2_hci \ Release \ hw2_hci.exe: 致命错误LNK1120:33未解析的外部
现在我来自Java背景,这非常容易理解。
如果我要去发布版本,我的dll和其他库(例如ftgl或glfw)应该放在哪里,这样当我在任何Windows 7机器上尝试这个程序时它会工作(不包括c ++) os)需要更新等。
答案 0 :(得分:0)
如果您了解链接是如何工作的,那么未解析的外部是非常简单的事情。我不会在这里详细介绍,但假设您在调试模式下工作时联系有效,但在发布模式下没有,这可能意味着两件事:
a)每个项目配置(发布/调试)必须根据包含的库单独配置(除非您使用正确配置的属性表)。首先,将您的解决方案切换到Release,然后查看您的项目设置 - &gt;链接器 - &gt;输入 - &GT;额外的依赖关系。您必须确保那里存在OpenGL和FTGL库。当你在Debug中添加它们时,并不意味着它们在Release中添加,你必须再次在那里。
b)有些库有两种类型,一种带有*d
后缀,有些带不带(如MyLibd.lib
和MyLib.lib
)。具有d后缀的那个是调试变体,其中一些函数可能具有不同的符号。确保在Debug中添加d后缀库,在Release配置中添加没有后缀的库。
问题本身意味着链接器无法找到某些功能。通过查看特定的链接器错误,您可能会看到缺少的函数的名称,大多数有些混淆(称为“名称管理”),如下所示:
unresolved external symbol "void __cdecl MyFunction(int,int)" (?MyFunction@@YAXHH@Z) referenced in function _main
这意味着MyFunction
无法解析,您必须确保导入包含此函数的DLL的正确导入库。
答案 1 :(得分:0)
项目的每个配置都使用自己独立的设置。
您的程序显然使用了一些外部库。您将这些库添加到项目的Debug配置的链接器设置中。但您从未将它们添加到Release配置的链接器设置中。因此错误。
转到项目设置,检查Debug和Release版本之间应该不变的所有设置,并确保它们是同步的。在这种情况下,这将是Linker->Input->Additional Dependencies
。
将来,当您更改不特定于特定配置(如Debug或Release版本)的项目设置时,请确保在输入新值之前始终在设置对话框中选择“所有配置”。