【发布时间】:2015-04-08 05:40:51
【问题描述】:
编辑:感谢随机投票者!
编辑 2:感谢 @πάνταῥεῖ 解释问题出了什么问题。运行调试器时,我得到 p>
Program received signal SIGSEGV, Segmentation fault.
0x0046f4c6 in ?? ()
编辑 3:仅当我运行交叉编译程序时才会发生这种情况。如果我在 Windows 中编译该程序并使用 WINE 运行它,则不会发生任何错误。
好吧,我现在正在与 WINE 和 MinGW32 战斗。
所以我有一个文件,sortem.cpp,它是使用 Makefile 编译并链接的,并且全部来自该 Makefile。
排序.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).和很多十六进制转储。我真的不知道我做错了什么,也许 SFML 库不是最新的?但这会给我一个编译错误,而不是运行时错误...非常感谢您的帮助,伙计们。
【问题讨论】:
-
这不是随机投票!您的问题缺少解决问题所需的大量信息。 1st:在调试器中运行程序时,您注意到了什么?第二:堆栈跟踪实际上告诉你什么?等
-
@πάνταῥεῖ 那么像您这样的评论将不胜感激。
-
一般情况下,您会在事先询问之前完成所有提到的努力。所以没有必要让 cmets 回答不好的问题。
-
@πάνταῥεῖ 那么请原谅我的错误。我现在正在添加一个编辑来解决您的第一个需求。
-
如果您在 gdb 中输入
bt或where,它将显示您在崩溃之前来自哪里。大多数情况下,这是开始输入up以查看您的代码实际在做什么的好地方。有些东西显然是 NULL,但不应该是 NULL。
标签: c++ makefile sfml mingw32 wine