在Linux上使用i586-mingw32msvc-g ++和SFML编译运行.exe时出错

时间:2015-02-08 11:50:42

标签: c++ makefile sfml mingw32 wine

编辑:谢谢随机的downvoter!

编辑2:感谢@πάνταῥεῖ解释问题的错误。运行调试器时我得到了

Program received signal SIGSEGV, Segmentation fault.
0x0046f4c6 in ?? ()

编辑3:只有在我运行交叉编译程序时才会发生这种情况。如果我在Windows中编译程序并使用WINE运行它,则不会发生任何错误。

好吧,我现在正在与WINE和MinGW32战斗。 所以我有一个文件sortem.cpp,它使用Makefile编译并链接,并且来自该Makefile。

sortem.cpp

#include <windows.h>
#include <iostream>
#include <string>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>

int main ()
{
    sf::RenderWindow window;
    window.create(sf::VideoMode(720,480),"Sort 'em!");
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
            {
                window.clear();
                switch (event.type)
                {
                    case sf::Event::Closed:
                        window.close();
                }
                window.display();
            }
    }
    return 0;
}

生成文件

LD = ../bin
LIBS= $(LD)/sfml-window-2.dll $(LD)/sfml-system-2.dll $(LD)/sfml-graphics-2.dll $(LD)/sfml-network-2.dll $(LD)/sfml-audio-2.dll
OBJECTS= sortem.o
CXX= i586-mingw32msvc-g++
all: sortem.exe

sortem.exe: $(OBJECTS)
     $(CXX) -o ../bin/sortem.exe $(OBJECTS) $(LIBS)

%.o: %.cpp 
    $(CXX) -c $<

clean:
     rm *.o 

因此程序编译完美,但在使用WINE运行sortem.exe时,它表示程序必须退出。我点击“显示详细信息”,然后弹出。 Unhandled exception: page fault on write access to 0x00000000 in 32-bit code (0x0046f4c6).和很多hexdumps。我真的不知道我做错了什么,也许SFML库不是最新的?但那会给我一个编译错误,而不是运行时错误......非常感谢你的帮助,伙计们。

1 个答案:

答案 0 :(得分:0)

这些库是用MinGW GCC 4.7.1编译的,我试图用MinGW GCC 4.8.1编译我的程序,感谢朋友降级,并重新上线。谢谢你们所有人都告诉我如何调试。 和平