Visual Studio:如何正确使用发布模式

时间:2014-11-11 15:25:28

标签: c++ visual-studio-2012

我正在尝试将我的程序作为发布版本发布。我切换到发布模式,然后我的* .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)需要更新等。

2 个答案:

答案 0 :(得分:0)

如果您了解链接是如何工作的,那么未解析的外部是非常简单的事情。我不会在这里详细介绍,但假设您在调试模式下工作时联系有效,但在发布模式下没有,这可能意味着两件事:

a)每个项目配置(发布/调试)必须根据包含的库单独配置(除非您使用正确配置的属性表)。首先,将您的解决方案切换到Release,然后查看您的项目设置 - &gt;链接器 - &gt;输入 - &GT;额外的依赖关系。您必须确保那里存在OpenGL和FTGL库。当你在Debug中添加它们时,并不意味着它们在Release中添加,你必须再次在那里。

b)有些库有两种类型,一种带有*d后缀,有些带不带(如MyLibd.libMyLib.lib)。具有d后缀的那个是调试变体,其中一些函数可能具有不同的符号。确保在Debug中添加d后缀库,在Release配置中添加没有后缀的库。

问题本身意味着链接器无法找到某些功能。通过查看特定的链接器错误,您可能会看到缺少的函数的名称,大多数有些混淆(称为“名称管理”),如下所示:

unresolved external symbol "void __cdecl MyFunction(int,int)" (?MyFunction@@YAXHH@Z) referenced in function _main

这意味着MyFunction无法解析,您必须确保导入包含此函数的DLL的正确导入库。

编辑:正如AndreyT建议的那样,当您对项目设置进行更改并希望它们在每个配置中时,从项目设置对话框的下拉菜单中选择“所有配置”设置是一个非常好的主意。 。这样可以省去为每个配置重新执行相同操作的麻烦。

答案 1 :(得分:0)

项目的每个配置都使用自己独立的设置。

您的程序显然使用了一些外部库。您将这些库添加到项目的Debug配置的链接器设置中。但您从未将它们添加到Release配置的链接器设置中。因此错误。

转到项目设置,检查Debug和Release版本之间应该不变的所有设置,并确保它们是同步的。在这种情况下,这将是Linker->Input->Additional Dependencies

将来,当您更改不特定于特定配置(如Debug或Release版本)的项目设置时,请确保在输入新值之前始终在设置对话框中选择“所有配置”。