我正在学习SFML库,我从教程中挑选了一段代码。它打开一个窗口,它应该让我能够再次关闭它,但当我关闭它时它会说
Debug Error!
Run-Time Check Failure #2 - stack around variable 'App' was corrupted.
and then the console stops working.
this is my code:
int main()
{
// Create the main window
sf::Window App(sf::VideoMode(800, 600, 32), "SFML Events");
while (App.IsOpened())
{
// Process events
sf::Event Event;
while (App.GetEvent(Event))
{
// Close window : exit
if (Event.Type == sf::Event::Closed)
App.Close();
// Escape key : exit
if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
App.Close();
}
// Display window on screen
App.Display();
}
return EXIT_SUCCESS;// = return 0
}
链接到调试库是
sfml-system.lib
sfml-window.lib
sfml-system-d.lib//these are debug files
sfml-window-d.lib
如果我移动前2并构建我的程序它不会出错,但是当我打开它时它说:
我有一台64位电脑。在microsoft vc ++ 2010中,我可以构建解决方案或调试,我总是构建解决方案。应用程序无法正确启动(0xc0150002)。单击“确定”关闭应用程序
我正在以发布模式构建,但我也尝试了两种方式,但它们都无法正常工作
有人可以告诉我我能做些什么来防止这种情况发生或者如何发生这种情况。
答案 0 :(得分:1)
对于这些应用程序启动问题,检查依赖关闭中的所有dll是否都可访问总是一个好主意 - 也就是说,它们是否都在搜索PATH中?我们通常使用dependency walker来检查哪些dll丢失,或使用gflags进行运行时诊断
虽然将你的dll与你的exe文件放在同一个文件夹中,但它不能很好地扩展,我通常做的一种方法是将库路径放在PATH环境变量中。
有一点需要注意的是,sfml带有vs2005和vs2008的预构建binrary,因为你使用的是vs2010,底层的c运行时库(msvcrt)是不同的,会有潜在的问题 - 你最好自己从源代码构建sfml使用vs2010或使用vs2005 / vs2008,只是为了保持一致
答案 1 :(得分:0)
如果你不想使用DLL并想将SFML编译成exe,这里是教程: 2.0 http://www.sfml-dev.org/tutorials/2.0/start-vc.php 你需要添加preprcessor指令SFML_STATIC,并在程序中使用你正在使用的附加库 - >>输入
答案 2 :(得分:0)
当我第一次使用它(和等效的libs)时,我也遇到了一些相关的问题。以下是一些要点: