繁体   English   中英

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

[英]Visual studio: How to use release mode properly

我正在尝试将我的程序作为发布版本发布 我切换到发布模式,然后我的* .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_hci \\ Release \\ hw2_hci.exe:致命错误LNK1120:33无法解析的外部

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

如果我要使用一个发行版本,则我的dll和其他库(例如ftgl或glfw)应位于哪里,以便在任何Windows 7计算机上尝试该程序时都可以运行(不包括所需的c ++更新等) 。。。

如果您了解链接的工作原理,则无法解决的外部问题非常简单。 我这里不做详细介绍,但是假设您的链接在Debug模式下有效,而在Release模式下无效,那么这可能意味着两件事:

a)必须根据所包含的库分别配置每个项目配置(发布/调试)(除非您使用的是正确配置的属性表)。 因此,首先,将解决方案切换到“发布”中,然后查看项目设置->链接器->输入->其他依赖项。 您必须确保那里存在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所建议的那样,当您对项目设置进行更改并希望它们出现在每个配置中时,从项目设置对话框的下拉菜单中选择“所有配置”设置是一个非常好的主意。 这样省去了为每种配置重新做相同事情的麻烦。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM