内部编译器错误 Visual Studio 社区 2017 与 SFML API
internal compiler error Visual Studio Community 2017 with SFML API
尝试编译包含 sfml api 库的 C++ 代码时,出现以下错误:
Internal Compiler Error in 'C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.10.25017\bin\HostX86\x86\CL.exe'
Choose the Technical Support command on the Visual C ++ Help menu, Or open the help desk file for more information
C:\Program Files (x86)\Microsoft Visual Studio17\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(358,5): error MSB6006: "CL.exe" Was terminated with code 2.
我在网上搜索了这个问题的解决方案,但我无法解决...
当我在 visual studio 论坛上寻求帮助时,我得到的唯一答案是:
“Thank you for your feedback! This issue has been fixed and it will be available in the next update to Visual Studio 2017. Thank you for helping us build a better Visual Studio!”
错误代码如下:
#include <SFML\Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(640, 480), "Bouncing Mushroom");
sf::Texture mushroomTexture;
mushroomTexture.loadFromFile("mushroom.png");
sf::Sprite mushroom(mushroomTexture);
sf::Vector2u size = mushroomTexture.getSize;
mushroom.setOrigin(size.x / 2, size.y / 2);
sf::Vector2f increment(0.4f, 0.4f);
while (window.isOpen())
{
sf::Event evnt;
while (window.pollEvent(evnt))
{
if (evnt.type == sf::Event::Closed)
window.close();
}
if ((mushroom.getPosition().x + (size.x / 2) > window.getSize().x && increment.x > 0) || (mushroom.getPosition().x - (size.x / 2) < 0 && increment.x < 0))
{
// Reverse the direction on X axis.
increment.x = -increment.x;
}
if ((mushroom.getPosition().y + (size.y / 2) > window.getSize().y && increment.y > 0) || (mushroom.getPosition().y - (size.y / 2) < 0 && increment.y < 0))
{
// Reverse the direction on Y axis.
increment.y = -increment.y;
}
mushroom.setPosition(mushroom.getPosition() + increment);
window.clear(sf::Color(16, 16, 16, 255)); // Dark gray.
window.draw(mushroom); // Drawing our sprite.
window.display();
}
内部编译器错误通常意味着编译器有问题并且看到它是 VS 2017,如果它是一个错误我不会感到惊讶,因为它是 VS 的较新版本。同时,您可以尝试找到触发此错误的代码行并找到替代解决方案或使用旧版本 Visual Studio.
我下载了visual studio 2015,尝试运行里面的代码(sfml的所有教程都是vs 2015做的)和代码运行.
我认为问题是sfml的库还不兼容vs 2017,所以解决方法很简单:
-使用 Visual Studio 2015 或
-重新编译 Visual Studio 2017 的库(我不知道该怎么做)
好吧,如果这确实是您要编译的代码,则存在 2 个语法错误:
1.- 第 10 行
mushroomTexture.getSize;
getSize 是 sf::Texture class 的方法,不是成员,所以只需添加 ();
mushroomTexture.getSize();
2.- 主函数末尾缺少一个“}”。 (我认为你只是没有正确复制这个,但无论如何都要检查一下。
window.display();
}
} <---- end of main() missing
如果这没有解决您的问题,那么您的 VS 版本可能有错误的 SFML 文件,如果您使用的是 VS 2017,请下载 Visual C++ 14 (2015) - 32 位 版本 https://www.sfml-dev.org/download/sfml/2.4.2/ 适用于 VS 2015 和 2017(我在 VS 2017 上使用它来测试你的示例并且它 运行 没有问题)。
尝试编译包含 sfml api 库的 C++ 代码时,出现以下错误:
Internal Compiler Error in 'C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.10.25017\bin\HostX86\x86\CL.exe' Choose the Technical Support command on the Visual C ++ Help menu, Or open the help desk file for more information C:\Program Files (x86)\Microsoft Visual Studio17\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(358,5): error MSB6006: "CL.exe" Was terminated with code 2.
我在网上搜索了这个问题的解决方案,但我无法解决... 当我在 visual studio 论坛上寻求帮助时,我得到的唯一答案是:
“Thank you for your feedback! This issue has been fixed and it will be available in the next update to Visual Studio 2017. Thank you for helping us build a better Visual Studio!”
错误代码如下:
#include <SFML\Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(640, 480), "Bouncing Mushroom");
sf::Texture mushroomTexture;
mushroomTexture.loadFromFile("mushroom.png");
sf::Sprite mushroom(mushroomTexture);
sf::Vector2u size = mushroomTexture.getSize;
mushroom.setOrigin(size.x / 2, size.y / 2);
sf::Vector2f increment(0.4f, 0.4f);
while (window.isOpen())
{
sf::Event evnt;
while (window.pollEvent(evnt))
{
if (evnt.type == sf::Event::Closed)
window.close();
}
if ((mushroom.getPosition().x + (size.x / 2) > window.getSize().x && increment.x > 0) || (mushroom.getPosition().x - (size.x / 2) < 0 && increment.x < 0))
{
// Reverse the direction on X axis.
increment.x = -increment.x;
}
if ((mushroom.getPosition().y + (size.y / 2) > window.getSize().y && increment.y > 0) || (mushroom.getPosition().y - (size.y / 2) < 0 && increment.y < 0))
{
// Reverse the direction on Y axis.
increment.y = -increment.y;
}
mushroom.setPosition(mushroom.getPosition() + increment);
window.clear(sf::Color(16, 16, 16, 255)); // Dark gray.
window.draw(mushroom); // Drawing our sprite.
window.display();
}
内部编译器错误通常意味着编译器有问题并且看到它是 VS 2017,如果它是一个错误我不会感到惊讶,因为它是 VS 的较新版本。同时,您可以尝试找到触发此错误的代码行并找到替代解决方案或使用旧版本 Visual Studio.
我下载了visual studio 2015,尝试运行里面的代码(sfml的所有教程都是vs 2015做的)和代码运行.
我认为问题是sfml的库还不兼容vs 2017,所以解决方法很简单:
-使用 Visual Studio 2015 或
-重新编译 Visual Studio 2017 的库(我不知道该怎么做)
好吧,如果这确实是您要编译的代码,则存在 2 个语法错误:
1.- 第 10 行
mushroomTexture.getSize;
getSize 是 sf::Texture class 的方法,不是成员,所以只需添加 ();
mushroomTexture.getSize();
2.- 主函数末尾缺少一个“}”。 (我认为你只是没有正确复制这个,但无论如何都要检查一下。
window.display();
}
} <---- end of main() missing
如果这没有解决您的问题,那么您的 VS 版本可能有错误的 SFML 文件,如果您使用的是 VS 2017,请下载 Visual C++ 14 (2015) - 32 位 版本 https://www.sfml-dev.org/download/sfml/2.4.2/ 适用于 VS 2015 和 2017(我在 VS 2017 上使用它来测试你的示例并且它 运行 没有问题)。