【问题标题】:Visual studio: How to use release mode properlyVisual Studio:如何正确使用发布模式
【发布时间】:2014-11-12 02:19:00
【问题描述】:

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

【问题讨论】:

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

标签: c++ visual-studio-2012


【解决方案1】:

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

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

转到项目设置,检查所有应该在调试和发布版本之间保持不变的设置,并确保它们是同步的。在本例中为Linker-&gt;Input-&gt;Additional Dependencies

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

【讨论】:

    【解决方案2】:

    如果您了解链接的工作原理,那么未解决的外部问题将是一件非常简单的事情。我在这里不做详细介绍,但假设您的链接在您处于调试模式时有效,而不是在发布模式下,这可能意味着两种可能的情况:

    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 建议的那样,当您更改项目设置并希望它们出现在每个配置中时,从项目设置对话框中的下拉菜单中选择“所有配置”设置是一个非常好的主意.这样就省去了为每个配置重新做同样事情的麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      相关资源
      最近更新 更多