Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Windows交叉编译后创建类中的segfault_C++_Segmentation Fault_Cross Compiling_Sfml - Fatal编程技术网

C++ Windows交叉编译后创建类中的segfault

C++ Windows交叉编译后创建类中的segfault,c++,segmentation-fault,cross-compiling,sfml,C++,Segmentation Fault,Cross Compiling,Sfml,我尝试使用SFML2.0forWindows创建一个prorgam,使用GentooLinux和mingw32 我不想重新编译SFML及其所有依赖项,所以我从下载了一个编译版本(版本32位-SJLJ) 我已经编译了我的代码,并在wine上执行了它,但当我试图从SFML实例化一个类时,它会出错。 我尝试过使用SFML的静态或动态版本,没有任何变化 使用调试模式,似乎SFML类上的this值未正确初始化 我的编译标志: main.cpp: 此取第一个参数的值,并移动所有其他值(fisrt arg具有

我尝试使用SFML2.0forWindows创建一个prorgam,使用GentooLinux和mingw32

我不想重新编译SFML及其所有依赖项,所以我从下载了一个编译版本(版本32位-SJLJ)

我已经编译了我的代码,并在wine上执行了它,但当我试图从SFML实例化一个类时,它会出错。 我尝试过使用SFML的静态或动态版本,没有任何变化

使用调试模式,似乎SFML类上的
this
值未正确初始化

我的编译标志:

main.cpp:

取第一个参数的值,并移动所有其他值(fisrt arg具有第二个值,…)

我已经测试了几个班级,结果都是一样的

问题出在哪里?

我认为调用约定之间存在差异,但我不确定。

似乎您以错误的方式初始化了SFML的VideoMode,相反,尝试创建一个以VideoMode作为第一个参数的窗口对象,如转发示例中所示:

sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");

我想turorials在这里应该会有所帮助,但它可以解释为什么仅仅从raw分配视频模式会导致SEGFULT。

尝试在堆上创建对象。看看这是否改变了什么:
sf::VideoMode*vm=newsf::VideoMode(800600)你有没有在葡萄酒以外的地方尝试过它(比如,真正的操作系统副本)?在模拟环境中调试已经够棘手的了,尝试在wine中调试视频可能会很糟糕。您能在构造函数中提供代码吗?你有没有可能破坏了这个ptr?0x320是十进制的800。你可能在某种程度上破坏了这个ptr。尝试在构造函数中使用不同的值,您可能会看到0x320值发生更改。在堆上创建对象不会更改任何内容。来自SFML的代码正在创建一个
sf::VideoMode
,这是完全有效的;不管怎样,这个问题发生在任何一个类上。使用
sf::时钟c也有同样的效果。嗯,在这里值得一试。仔细观察您的错误后,您的最终猜测显然是正确的,此处未正确设置或处理此变量,因为它接受第一个参数的值。你试过的每门课都有同样的问题吗?
#include <SFML/Window.hpp>

int main() {
  sf::VideoMode vm(800, 600);

  return 0;
}
wine: Unhandled page fault on write access to 0x00000320 at address 0x4021e9 (thread 0026), starting debugger...
Unhandled exception: page fault on write access to 0x00000320 in 32-bit code (0x004021e9).
Register dump:
 CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b
 EIP:004021e9 ESP:0087fd78 EBP:0087fd78 EFLAGS:00010202(  R- --  I   - - - )
 EAX:00000320 EBX:7b896ff4 ECX:0087fdd4 EDX:00000258
 ESI:7ffdf000 EDI:004012b0
Stack dump:
0x0087fd78:  0087fdf8 004013bd 00000320 00000258
0x0087fd88:  00000020 0040c387 00401340 004012b0
0x0087fd98:  0087fdc8 00000000 00000001 7ffdf000
0x0087fda8:  0087fdc8 7ed71ff4 00409fc0 00418d28
0x0087fdb8:  00419370 0087fde0 004013ca 0087fd80
0x0087fdc8:  0087fde8 0040b162 00000001 0000ffff
Backtrace:
=>0 0x004021e9 VideoMode+0x9(this=0x320, modeWidth=0x258, modeHeight=0x20, modeBitsPerPixel=0x40c387) [D:\developpement\sfml-misc\release\2.0-rc1\gcc4-sjlj\debug-static\src\SFML\Window/D:/developpement/sfml-master/src/SFML/Window/VideoMode.cpp:50] in chess (0x0087fd78)
  1 0x004013bd main+0x6c() [/home/bak/projets/bjtu/server architecture/Chess/main.cpp:5] in chess (0x0087fdf8)
  2 0x004010fd in chess (+0x10fc) (0x0087fe88)
  3 0x7b85d80f in kernel32 (+0x4d80e) (0x0087fec8)
  4 0x7bc73ed0 call_thread_func_wrapper+0xb() in ntdll (0x0087fed8)
  5 0x7bc7690d call_thread_func+0x7c() in ntdll (0x0087ffa8)
  6 0x7bc73eae RtlRaiseException+0x21() in ntdll (0x0087ffc8)
  7 0x7bc4c78e call_dll_entry_point+0x61d() in ntdll (0x0087ffe8)
  8 0xf767106d wine_call_on_stack+0x1c() in libwine.so.1 (0x00000000)
  9 0xf767112b wine_switch_to_stack+0x2a() in libwine.so.1 (0xffd55c28)
  10 0x7bc51e6f LdrInitializeThunk+0x2ee() in ntdll (0xffd55c98)
  11 0x7b86371a __wine_kernel_init+0xa19() in kernel32 (0xffd56e38)
  12 0x7bc5269b __wine_process_init+0x25a() in ntdll (0xffd56eb8)
  13 0xf766e5e2 wine_init+0x291() in libwine.so.1 (0xffd56f28)
  14 0x7bf0106b main+0x7a() in <wine-loader> (0xffd57378)
  15 0xf74b6596 __libc_start_main+0xe5() in libc.so.6 (0xffd573f8)
0x004021e9 VideoMode+0x9 [D:\developpement\sfml-misc\release\2.0-rc1\gcc4-sjlj\debug-static\src\SFML\Window/D:/developpement/sfml-master/src/SFML/Window/VideoMode.cpp:50] in chess: movl   %edx,0x0(%eax)
 =>0 0x004021e9 VideoMode+0x9(this=0x320, modeWidth=0x258, ...
sf::Window App(sf::VideoMode(800, 600, 32), "SFML Window");