【问题标题】:How compile a project on MinGW that use gtk and file.glade?如何在 MinGW 上编译使用 gtk 和 file.glade 的项目?
【发布时间】:2016-08-01 12:45:09
【问题描述】:

我必须安装什么来编译使用 gtk2 e 文件 glade(使用 glade 3.8 制作)的 file.c?

我已经用 Pacman -S 安装了 libglade,我尝试用 gcc -export-dynamic File.c -o 浏览器 $(pkg-config --cflags --libs gtk+-2.0)\ $( pkg-config --cflags --libs libglade-2.0) 在这个 MinGW 不起作用之后.. 对于它输入的每个命令,它都会输出如下内容:

1367211018 [main] bash 9420 fork: child -1 - fork 进程 8876 意外死亡,重试 0,退出代码 0xC0000005,errno 11 bash:fork:重试:没有子进程 1368436447 [main] bash 9420 fork: child -1 - fork 进程 3968 意外死亡,重试 0,退出代码 0xC0000005,errno 11 bash:fork:重试:没有子进程 1370680659 [main] bash 9420 fork: child -1 - fork 进程 1404 意外死亡,重试 0,退出代码 0xC0000005,errno 11 bash:fork:重试:没有子进程 bash: fork: 没有子进程

如何解决这个问题并使用 gtk(C),file.glade 编译项目? 你有指南吗?

【问题讨论】:

  • 构建过程中的某些内容因访问冲突而崩溃(相当于非 Windows 平台上的段错误)。如果您只运行 pkg-config --cflags --libs gtk+-2.0 会发生什么?
  • 它可以工作 OutPut -mms-bitfields -pthread -mms-bitfields -IC:/msys32/mingw32/include/gtk-2.0 -IC:/msys32/mingw32/lib/gtk-2.0/include - IC:/msys32/mingw32/include/pango-1.0 -IC:/msys32/mingw32/include +ecc
  • 如果我运行 gcc -W file.c $(pkg-config --cflags --libs gtk+-2.0) 他会回复 gcc: internal compiler error: Segmentation fault (program as) Please submit a完整的错误报告,如果合适的话,带有预处理的源代码。有关说明,请参阅 gcc.gnu.org/bugs.html>。
  • 如果program as 表示the program called "as",那么汇编程序就会出现段错误,这很奇怪。 gcc --version 说什么?你安装了哪些pacman 软件包?
  • 程序不叫“as”/// gcc--version say gcc (GCC) 5.3.0 Copyright (C) 2015 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。 /// 我已经安装了 pacman -S mingw32/mingw-w64-i686-glade //pacman -S mingw32/mingw-w64-i686-libglade

标签: gtk mingw glade


【解决方案1】:

这并不完全是一个答案,因为我无法从所提供的信息中准确找出您的问题。因此,与上面的“评论”框允许的空间相比,我需要更多的空间(.. 如果 SO 版主对此感到不安,请告诉我,我将删除我的提交)。

首先,您所说的“MinGW”是什么意思?你的意思是:

1) 你已经构建了一个合适的 MinGW 环境并从头开始编译你的所有代码(例如,按照这些 (http://ingar.satgnu.net/devenv/mingw32/index.html) 等优秀的说明进行操作)

2) 您已经为 Glade 等下载了一些 Windows 二进制文件?

3) 您使用的是 MSys2?

如果您使用的是 Msys2,我会很惊讶您的 Glade 是 Gtk+ (2),因为 AlexPu(MSys2 的负责人)亲自告诉我他不会创建 Glade 的 Gtk+ (2) 变体,因为他觉得这会导致与 Gtk3 变体的太多冲突。这意味着,在 Msys2 上,拥有 (MinGW) Gtk+ (2) 兼容 Glade 的唯一方法是使用 MSys2/AlexPu“从头开始创建神秘机制”。即使在 MSys2 的帮助下,我们也无法构建它(并且该过程会引发很多 bash 错误)。

因此,一种可能性是您正在使用带有 Gtk2 代码的 Gtk3 Glade 变体,这将永远无法工作,但这不是唯一的“问题”,见下文。

此外,如果您拥有适当的 MinGW Gtk+ 机器,您对 libs 的引用看起来与我们所期望的有点不同。例如,我们所有的 Win/Gtk+ (2) 应用程序通常至少需要以下库:

$(#gtk)\bin\libgtk-win32-2.0-0.dll

$(#gtk)\bin\libgdk-win32-2.0-0.dll

$(#gtk)\bin\libgobject-2.0-0.dll

$(#gtk)\bin\libglib-2.0-0.dll

...对于 Pango、Cairo 等,通常还有更多。

无论您是从头开始编译,还是只是“通过 MSys2/pacman 安装”,这些都应该是相同的。

当然,几乎可以肯定,还会有其他依赖,需要“搜索路径”,而且你的“路径”上必须有各种东西。

其次,您的错误消息很奇怪,并引用“bash”问题。这听起来更像是您正在使用的任何类似 MinGW/Unix 的外壳/系统中的“脚本/指令”问题。

它们听起来不像“正确的 Gtk 崩溃”。通常,Windows 实际上会发出一个 SIGSEGV,并且在调试器日志中它实际上会使用“分段错误”等词。如果 SIGSEGV 真的很讨厌,Windows 可能不会明确地“说什么”(空白控制台等),并且您的 GDB 可能只看到“一些”问题的“一些提及”。

另外,如果您使用 Glade,那么它只是一个 xml 文件,它试图让您的 Gtk 生活更轻松。 Gtk 具有将 Glade xml 文件解释为其他虚拟“Gtk 代码”的代码。坦率地说,我们发现在很多情况下 Glade 麻烦多于其价值,而仅通过代码编写 GUI 更有效,同样,通常,并非总是如此。

第三,有可能(我们已经做到了)使用基于 Windows 二进制文件的 Glade,并链接到其中的库,但是对于 Glade 库,您仍然需要获取(正确的)Gtk+ 库。

如您所见,如果不了解您的设置,很难提供准确的答案。

我强烈建议您不要从命令行运行。可以做到,但是需要“连接”的繁琐事情太多了,才能让 Gtk/Glade/GCC 等都正确地相互交谈。我强烈建议安装 Code::Blocks (http://www.codeblocks.org/);它是免费且优秀的(或一些不错的 IDE)。然后,您可以非常轻松地设置路径/依赖项(在您确认 dll/lib 的存在以及它们的确切路径、版本等之后)。

此外,CodeBlock 的社区在集成外部包(如 Glade/GCC/Gtk 等)方面拥有丰富的经验。

某些(不是全部)MinGW dll 将包含版本号,右键单击 dll,单击属性并根据您的操作系统查找保存 dll 版本号的“版本”或“详细信息”等。所有的 Gtk 都会。通常,文件名还包含版本号“指示符”,但有时最好确定。

顺便说一句,如果你的 Glade 的版本号 > 3.8.5,那么几乎可以肯定它是 Gtk3。

顺便说一句,如果您“正确”编码了所有内容并提供了所有库等,但其中一些库是 Gtk2 而其他库是 Gtk3(并且没有其他重大问题),那么 Gtk 本身会禁止它,并且告诉你它不会接受“混合 2 和 3”。

... 和以前一样,我们对 MSys2 的体验一直很不愉快。我们发现,按照“Ingar 的指示”(http://ingar.satgnu.net/devenv/mingw32/index.html) 进行大约一天的投资​​,将为您提供一个从头开始构建的功能齐全的 Windows MinGW 基础架构,包括 GCC/Gtk 等,并且您可以完全控制并知道在哪里一切都是,一切都做了什么等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2013-02-03
    • 2017-09-10
    相关资源
    最近更新 更多