【问题标题】:SFML image loading fails on release version - filename corruption发布版本上的 SFML 图像加载失败 - 文件名损坏
【发布时间】:2014-02-08 23:27:50
【问题描述】:

使用 VC++,在调试模式下,一切正常。但是当我创建一个 Release 时,它​​不会加载图像,可能是因为文件名损坏。

代码如下:

Pozadi.loadFromFile("gfx/splash.png");

它给了我这个错误:

Failed to load image "splash.png \♫" Reason: Unable to open file

还有一些图片给了我更奇怪的文件名,比如完全损坏的路径名。

知道可能是什么原因吗?

谢谢

【问题讨论】:

  • 请向我们展示loadFromFile()的实现
  • 我可能误解了您的回答,但 loadFromFile() 是 SFML 库定义的 sf::Texture 类的方法。
  • 是的,但是如果不知道这个方法到底是做什么的(逐行),我们无法帮助您,否则您为什么不尝试附加调试器?
  • 好在 SFML 是开源的。我在它的源代码中找到了这三个函数,它们相互使用以从文件中加载图像:pastebin.com/ZaupPajP
  • 我无法想象是什么导致了名称损坏,因为根据该源代码,它只是通过 const 引用直接转发字符串。但从程序的角度来看,这些在不同配置上的打开失败通常与工作目录有关。尝试使用std::ifstream 打开同一个文件,成功了吗?或者更确切地说,它是否在与调用loadFromFile 相同的条件下成功和失败?

标签: c++ image textures sfml


【解决方案1】:

在混合调试和发布版本的库或基本上只是运行时库时,字符串的奇怪行为是一个常见问题。

如果您处于调试模式,则必须使用 -d 后缀(例如 sfml-graphics-d)链接 SFML 库。如果您处于发布模式,则必须链接不带 -d 后缀的 SFML 库(例如 sfml-graphics)。如果您是静态链接,请确保根据 SFML 库的构建方式选择静态或动态运行时库。

如果这没有帮助,您可能需要确保没有混合编译器版本(例如,将 SFML 的 Visual Studio 2012 库与您的 Visual Studio 2013 版本一起使用)。

【讨论】:

  • 非常感谢!我删除了属性 -> 链接器 -> 输入 -> 附加依赖项中的 -d 后缀,现在一切正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 2020-12-16
相关资源
最近更新 更多