2

我正在尝试让 gtkmm 使用 MinGW 在 Windows 7 上工作。但是,当我从gtkmm-tutorial编译 hello world 程序后,exe 会因段错误而崩溃。

我已经用这个编译了程序:

$ g++ helloworld.cc main.cc -o hw `pkg-config --cflags --libs gtkmm-2.4`

这是 gdb 显示的内容:

$ gdb hw.exe
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "mingw32".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from c:\dev/hw.exe...done.
(gdb) run
Starting program: c:\dev/hw.exe
[New Thread 4348.0x1560]
[New Thread 4348.0x1430]

Program received signal SIGSEGV, Segmentation fault.
0x664d85b2 in Glib::ObjectBase::ObjectBase (this=0x47453c, __vtt_parm=0x1,
    __in_chrg=<value optimized out>) at objectbase.cc:49
49      objectbase.cc: No such file or directory.

我是一个新手,所以我不知道如何让它工作。

我从这里下载了 gtkmm(2.22 版本)和 g++ 的版本:

$ g++ -v
Using built-in specs.
COLLECT_GCC=c:\Mingw\bin\g++.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/i686-pc-mingw32/4.7.1/lto-wrappe
r.exe
Target: i686-pc-mingw32
Configured with: ../src/configure --prefix=/c/temp/gcc/dest --with-gmp=/c/temp/g
cc/gmp --with-mpfr=/c/temp/gcc/mpfr --with-mpc=/c/temp/gcc/mpc --enable-language
s=c,c++ --with-arch=i686 --with-tune=generic --disable-libstdcxx-pch --disable-n
ls --disable-shared --disable-sjlj-exceptions --disable-win32-registry --enable-
checking=release --enable-lto
Thread model: win32
gcc version 4.7.1 (GCC)

我需要更多的东西吗?还是我做错了?

4

1 回答 1

2

似乎 MinGW对 GCC 4.7.0 进行了 ABI 更改。如果你的 gtkmm 是用早期的 GCC 编译的,这会导致你看到的问题。尝试使用相同的编译器重建 gtkmm。

于 2012-07-11T22:52:55.383 回答