今天我决定下载,安装并尝试使用SFML 2.2.我还用MinGW编译器下载了Code :: Blocks.我设置了所有内容并正确安装了所有内容(或者我认为)并尝试运行示例代码以查看它是否可行:
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码编译正确,虽然尝试运行它出现一个错误消息框说"程序入口点_ZSt24__throw_out_of_range_fmtPKcz无法位于动态链接库sfml-graphics-2.dll".我在网上搜索但没有发现任何与此问题有关的内容,所以我来到这里寻求帮助.感谢进一步的答案.
出现此问题的主要原因是为您所使用的DLL的其他版本创建了DLL的导入库。
构建应用程序时,使用了导入库,以便链接程序可以找到应用程序正在调用的SFML函数。但是,DLL本身不包含导入库具有存根的一个或多个函数。
当创建隐式加载DLL的应用程序时,需要3个步骤:
编译器只关心程序在语法上是正确的。这工作没有错误。
链接器阶段确定您正在调用的函数是否确实存在。这是棘手的地方,因为函数存根存在于导入库中,并且可以满足链接器的要求。导入库告诉链接器:“是的,此函数在此DLL中,请相信我。” 这也为您工作没有错误
(请注意,在非DLL方案中,链接器实际上将查找函数本身,而不是存根,这是不同的)。
但是,实际功能本身位于不同的模块(DLL)中,并且应用程序唯一可以确定其存在的时间是在运行程序时。这就是您现在陷入困境的地方。
因此,您首先应该做的是确保在构建应用程序时使用的导入库与您在运行时加载的DLL相匹配。如果仍然出现错误,请联系您获得DLL的位置,并询问如何获取正确的导入库。
此外,如果由于某种原因而无法获取导入库,则可以通过多种方法从DLL创建导入库。我不知道如何为MingW手动执行此操作的所有详细信息,但这些信息应该可以在线获得。
| 归档时间: |
|
| 查看次数: |
6295 次 |
| 最近记录: |