如何在使用 gtk 和 file.glade 的 MinGW 上编译项目?
How compile a project on MinGW that use gtk and file.glade?
编译使用 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 - forked process 8876 意外死亡,重试 0,退出代码 0xC0000005,errno 11
bash: fork: retry: 没有子进程
1368436447 [main] bash 9420 fork: child -1 - forked process 3968 意外死亡,重试 0,退出代码 0xC0000005,errno 11
bash: fork: retry: 没有子进程
1370680659 [main] bash 9420 fork: child -1 - forked process 1404 yield unexpectedly, retry 0, exit code 0xC0000005, errno 11
bash: fork: retry: 没有子进程
bash: fork: 没有子进程
我如何解决这个问题并使用 gtk(C) 编译项目,file.glade?
有指导吗?
这不完全是一个答案,因为我无法从提供的信息中准确地找出您的问题所在。因此,与上面 "comment" 框允许的相比,我需要更多 space(.. 如果 SO 版主对此感到不安,请告诉我,我会撤下我的提交)。
首先,你说"MinGW"是什么意思?你是说:
1) 您已经构建了合适的 MinGW 环境并从头开始编译了所有代码(例如,遵循这些 (http://ingar.satgnu.net/devenv/mingw32/index.html) 等优秀说明)
2) 您已经为 Glade 等下载了一些 Windows 二进制文件?
3) 您使用的是 MSys2?
如果您使用的是 Msys2,我会惊讶于您的 Glade 是 Gtk+ (2),因为 AlexPu(MSys2 的负责人)亲自告诉我他不会创建 Gtk+ (2) 变体Glade,因为他认为这会导致与 Gtk3 变体发生太多冲突。这意味着,在 Msys2 上,获得 (MinGW) Gtk+ (2) 兼容 Glade 的唯一方法是使用 MSys2/AlexPu "create from scratch mystery mechanism"。我们从来没有能够构建它,即使在 MSys2 的帮助下也是如此(并且该过程引发了很多 bash 错误)。
因此,一种可能性是您使用的是带有 Gtk2 代码的 Gtk3 Glade 变体,它永远不会工作,但这不可能是唯一的 "issue",见下文。
此外,如果您有适当的 MinGW Gtk+ 机制,您对库的引用看起来与我们预期的有点不同。例如,我们所有的 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 等地通常更多
无论您是从头开始编译还是只是 "installed via MSys2/pacman",这些都应该是相同的。
当然,几乎可以肯定的是,还会有其他的依赖,并且"search paths"需要,而且各种东西必须在你的"Path".
其次,您的错误消息很奇怪,并且引用了 "bash" 个问题。这听起来更像是 "scripting/instruction" 你正在工作的 MinGW/Unix-like shell/system 中的问题。
它们听起来不像 "proper Gtk crashes"。通常,Windows 实际上会发出一个 SIGSEGV,并且在调试器日志中它实际上会使用 "segmentation fault" 等词。如果 SIGSEGV 真的很讨厌,Windows 可能不会 "say anything" 显式(空白控制台等),您的 GDB 可能只会看到 "some mention" 个 "some" 问题。
此外,如果您使用的是 Glade,那么它只是一个 xml 文件,旨在让您的 Gtk 生活更轻松。 Gtk 具有将 Glade xml 文件解释为其他虚拟 "Gtk code" 的代码。坦率地说,我们发现在很多情况下,Glade 的麻烦多于它的价值,通过代码编写 GUI 效率更高,同样,通常,并非总是如此。
第三,可以(我们已经做到了)使用基于 Windows 二进制文件的 Glade,以及 link 到其中的库,但那是针对 Glade 库,你仍然会需要获取(正确的)Gtk+ 库。
如您所见,如果不进一步了解您的设置,很难提供准确的答案。
我也强烈建议您不要从命令行 运行。这是可以做到的,但是需要 "connected" 才能让 Gtk/Glade/GCC 等彼此正确对话的繁琐事情太多了。我强烈建议安装 Code::Blocks (http://www.codeblocks.org/);它是免费的而且非常好(或者一些不错的 IDE)。然后,您可以非常轻松地设置您的 paths/dependencies(在确认 dll's/lib 的存在及其确切路径、版本等之后)。
此外,CodeBlock 的社区在集成外部包(如 Glade/GCC/Gtk 等)方面拥有丰富的经验。
一些(不是全部)MinGW dll 将包含版本号,右键单击 dll,单击属性并查找,具体取决于您的 OS、"version" 或 "details" 等在哪里dll 的版本号被保留。所有的 Gtk 都会。通常,文件名还包含版本号 "indicator",但有时最好确定一下。
顺便说一句,如果您的 Glade 的版本号 > 3.8.5,那么几乎可以肯定它是 Gtk3。
顺便说一下,如果你编写了所有代码 "correctly" 并提供了所有的库等等,但是一些库是 Gtk2 而其他的是 Gtk3(并且没有其他主要问题),那么 Gtk 本身会禁止它,并告诉你它不会接受 "mixed 2 and 3".
...和以前一样,我们对 MSys2 的体验并不愉快。我们发现,投资大约一天并遵循 "Ingar's instructions" (http://ingar.satgnu.net/devenv/mingw32/index.html) 将为您提供一个从头开始构建的功能齐全的 Windows MinGW 基础架构,其中包含 GCC/Gtk 等,并且你可以完全控制,知道一切在哪里,做什么等等
编译使用 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 - forked process 8876 意外死亡,重试 0,退出代码 0xC0000005,errno 11 bash: fork: retry: 没有子进程 1368436447 [main] bash 9420 fork: child -1 - forked process 3968 意外死亡,重试 0,退出代码 0xC0000005,errno 11 bash: fork: retry: 没有子进程 1370680659 [main] bash 9420 fork: child -1 - forked process 1404 yield unexpectedly, retry 0, exit code 0xC0000005, errno 11 bash: fork: retry: 没有子进程 bash: fork: 没有子进程
我如何解决这个问题并使用 gtk(C) 编译项目,file.glade? 有指导吗?
这不完全是一个答案,因为我无法从提供的信息中准确地找出您的问题所在。因此,与上面 "comment" 框允许的相比,我需要更多 space(.. 如果 SO 版主对此感到不安,请告诉我,我会撤下我的提交)。
首先,你说"MinGW"是什么意思?你是说:
1) 您已经构建了合适的 MinGW 环境并从头开始编译了所有代码(例如,遵循这些 (http://ingar.satgnu.net/devenv/mingw32/index.html) 等优秀说明)
2) 您已经为 Glade 等下载了一些 Windows 二进制文件?
3) 您使用的是 MSys2?
如果您使用的是 Msys2,我会惊讶于您的 Glade 是 Gtk+ (2),因为 AlexPu(MSys2 的负责人)亲自告诉我他不会创建 Gtk+ (2) 变体Glade,因为他认为这会导致与 Gtk3 变体发生太多冲突。这意味着,在 Msys2 上,获得 (MinGW) Gtk+ (2) 兼容 Glade 的唯一方法是使用 MSys2/AlexPu "create from scratch mystery mechanism"。我们从来没有能够构建它,即使在 MSys2 的帮助下也是如此(并且该过程引发了很多 bash 错误)。
因此,一种可能性是您使用的是带有 Gtk2 代码的 Gtk3 Glade 变体,它永远不会工作,但这不可能是唯一的 "issue",见下文。
此外,如果您有适当的 MinGW Gtk+ 机制,您对库的引用看起来与我们预期的有点不同。例如,我们所有的 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 等地通常更多
无论您是从头开始编译还是只是 "installed via MSys2/pacman",这些都应该是相同的。
当然,几乎可以肯定的是,还会有其他的依赖,并且"search paths"需要,而且各种东西必须在你的"Path".
其次,您的错误消息很奇怪,并且引用了 "bash" 个问题。这听起来更像是 "scripting/instruction" 你正在工作的 MinGW/Unix-like shell/system 中的问题。
它们听起来不像 "proper Gtk crashes"。通常,Windows 实际上会发出一个 SIGSEGV,并且在调试器日志中它实际上会使用 "segmentation fault" 等词。如果 SIGSEGV 真的很讨厌,Windows 可能不会 "say anything" 显式(空白控制台等),您的 GDB 可能只会看到 "some mention" 个 "some" 问题。
此外,如果您使用的是 Glade,那么它只是一个 xml 文件,旨在让您的 Gtk 生活更轻松。 Gtk 具有将 Glade xml 文件解释为其他虚拟 "Gtk code" 的代码。坦率地说,我们发现在很多情况下,Glade 的麻烦多于它的价值,通过代码编写 GUI 效率更高,同样,通常,并非总是如此。
第三,可以(我们已经做到了)使用基于 Windows 二进制文件的 Glade,以及 link 到其中的库,但那是针对 Glade 库,你仍然会需要获取(正确的)Gtk+ 库。
如您所见,如果不进一步了解您的设置,很难提供准确的答案。
我也强烈建议您不要从命令行 运行。这是可以做到的,但是需要 "connected" 才能让 Gtk/Glade/GCC 等彼此正确对话的繁琐事情太多了。我强烈建议安装 Code::Blocks (http://www.codeblocks.org/);它是免费的而且非常好(或者一些不错的 IDE)。然后,您可以非常轻松地设置您的 paths/dependencies(在确认 dll's/lib 的存在及其确切路径、版本等之后)。
此外,CodeBlock 的社区在集成外部包(如 Glade/GCC/Gtk 等)方面拥有丰富的经验。
一些(不是全部)MinGW dll 将包含版本号,右键单击 dll,单击属性并查找,具体取决于您的 OS、"version" 或 "details" 等在哪里dll 的版本号被保留。所有的 Gtk 都会。通常,文件名还包含版本号 "indicator",但有时最好确定一下。
顺便说一句,如果您的 Glade 的版本号 > 3.8.5,那么几乎可以肯定它是 Gtk3。
顺便说一下,如果你编写了所有代码 "correctly" 并提供了所有的库等等,但是一些库是 Gtk2 而其他的是 Gtk3(并且没有其他主要问题),那么 Gtk 本身会禁止它,并告诉你它不会接受 "mixed 2 and 3".
...和以前一样,我们对 MSys2 的体验并不愉快。我们发现,投资大约一天并遵循 "Ingar's instructions" (http://ingar.satgnu.net/devenv/mingw32/index.html) 将为您提供一个从头开始构建的功能齐全的 Windows MinGW 基础架构,其中包含 GCC/Gtk 等,并且你可以完全控制,知道一切在哪里,做什么等等