C++ VisualStudio:如何正确使用发布模式

C++ VisualStudio:如何正确使用发布模式,c++,visual-studio-2012,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>

我正试图以发布版本的形式发布我的程序。我切换到释放模式,然后我的*.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> C:\Users\student\Documents\VSTest\hw2\u hci\Release\hw2\u hci.exe: 致命错误LNK1120:33个未解析的外部

现在我来自Java背景,非常容易理解


<如果我要发布版本,我的DLL和其他库(如FTGL或GLFW)应该位于哪里,这样当我在任何Windows 7机器上试用这个程序时,它将被排除在操作系统之外,除了需要的C++更新等等之外。我在这里不详细介绍,但假设您的链接在调试模式下工作,而不是在发布模式下工作,这可能意味着两种情况:

除非您使用的是正确配置的属性表,否则每个项目配置版本/调试都必须按照包含的库单独配置。因此,首先,将解决方案切换到发行版,然后查看项目设置->链接器->输入->其他依赖项。您必须确保OpenGL和FTGL库都存在。当您在调试中添加它们时,并不意味着它们是在发行版中添加的,您必须在发行版中再次添加它们

b有些库有两种风格,一种带有*d后缀,另一种没有,比如MyLibd.lib和MyLib.lib。带有d后缀的是调试变量,其中某些函数可能具有不同的符号。确保在调试中添加了d后缀库,在发布配置中添加了没有后缀的库

问题本身意味着链接器找不到某些函数。查看特定的链接器错误,您可能会看到缺少的函数名,大多数函数名都有点模糊,称为名称管理,如下所示:

未解析的外部符号void\uu cdecl MyFunctionint,int?MyFunction@@YAXHH@Z在函数_main中引用

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


编辑:正如AndreyT所建议的,当您更改项目设置并希望它们位于每个配置中时,最好从“项目设置”对话框的下拉菜单中选择“所有配置”设置。这样就省去了为每个配置重新执行相同操作的麻烦。

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

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

转到“项目设置”,检查在调试和发布版本之间应该保持不变的所有设置,并确保它们同步。在这种情况下,这将是链接器->输入->其他依赖项


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

使用“属性”对话框设置包含路径、库路径、,等等。您需要为调试和发布构建都这样做。您还可以选择“所有配置”来更改调试和发布版本配置。@RichardChambers实际上,使用常用编辑器编辑.vcxproj文件要比尝试对所有可能的版本类型执行此操作容易得多。比较调试和发布配置中的链接器设置。特别是,附加依赖项列表。您对标题所做的更正是错误的。它是无效的C++在两种方式:单反斜杠,并使用反斜杠在一个包含指令,虽然接受了Visual C++作为一个语言扩展。删除新的包含并取消注释旧的。完美的信息人物!我不知道调试和发布都有不同的配置!