【问题标题】:Using GTK+ without MSYS2在没有 MSYS2 的情况下使用 GTK+
【发布时间】:2019-06-20 06:54:13
【问题描述】:

尊敬的程序员和开发人员,

我真的很想在 Windows 上试用 GTK+ 3。因此,我阅读了https://www.gtk.org/download/windows.php 的官方 GTK+ 下载说明,并使用 MSYS2 安装了所有内容。

现在我的 MSYS2 文件夹的 mingw64 子目录中有很多文件。

问题:我如何正确地包含所有这些?如何链接到 GTK+ 及其所有依赖项?我知道 Linux C/C++ 编译器有一个神奇的 pkg-config 属性,但不幸的是我真的对在 MSYS2 中编译我的项目不感兴趣。我愿意使用简单的 MinGW (64) 编译器。

谁能帮我使用 MSYS2 使用简单的 MinGW 64 位编译器为愚蠢的 C++ 项目生成的 .a、.h 和 .dll'a?

这会让我非常开心!

达斯月亮

€edit:我实际上已经从https://www.dropbox.com/sh/8d1qbh5dsp044on/AAB63l5I1eZks-QqjH6HXUJHa 下载了预编译的 GTK+ 版本。不幸的是,它只有 32 位,但我很快就会尝试自己编译整个 GTK+ 项目,就像 https://github.com/Wesley-Chan/GTK-for-Windows 的这个人所做的那样。

但是如果有人知道如何在 windows 下顺利构建 GTK+(尤其是 64 位),请告诉我!我真的很喜欢 GTK+ 示例应用程序,我真的很想制作自己的!

【问题讨论】:

  • MSYS2 使用其包管理器和 Linux 实用程序端口极大地简化了 Windows 的 C/C++ 软件开发。您使用 MSYS2 编译的程序可以从 MSYS2 中复制出来(连同所需的 DLL),并在最终用户的计算机上作为独立应用程序运行。如果你真的想通过不使用 MSYS2 让你的生活变得更艰难,你至少应该尝试自己做,然后在遇到无法解决的特定错误消息时提出特定问题。
  • 您的具体消息告诉我,它无法找到对我调用的所有 gtk+ 函数的引用,尽管我将我的程序与我的 msys/mingw64/lib 文件夹中的每个 (!!) 库链接.
  • @David Grayson 如果我使用 MSYS2 下载 GTK+ 库并将我的应用程序与位于 lib/ 文件夹中的所有库链接,则没有任何反应。仍然缺少所有引用,就像我没有链接一样。但是,如果我在dropbox.com/sh/8d1qbh5dsp044on/AAB63l5I1eZks-QqjH6HXUJHa 使用这个人的预编译库并使用 -m32 为 32 位编译我的程序,一切都会按预期工作!我做错了什么?
  • 我认为您可能会对使用 -L 包含在链接指令中的目录感到困惑,该目录中可能包含许多库,并且实际上使用 - 与特定库链接l(即 el)。仅仅因为一个目录中有很多库并不意味着您正在链接所有这些库。
  • 哦,对不起,我忘了提到我正在使用 Makefile 查找位于我的库文件夹中的所有 *.a 文件,并在链接时使用它们,就像一个目标文件一样。正如我已经说过的,使用预编译库,一切都按预期工作。只有 MSYS2 中的库不能正常工作或独立运行或其他。

标签: c++ c++14 gtk3 mingw-w64 msys2


【解决方案1】:

我能够在 MSYS2 的 MinGW 64 位 shell 中成功编译 GTK3 程序。首先我安装了 GTK3 包:

pacman -S $MINGW_PACKAGE_PREFIX-gtk3

然后我使用以下命令从this page 编译了第一个示例程序:

gcc test_gtk.c $(pkg-config gtk+-3.0 --cflags --libs)

然后我运行./a.exe,它创建了一个窗口。

如果您收到“未定义的引用”链接器错误,这意味着您的 Makefile 没有将您的程序链接到所有正确的库,或者链接器的输入顺序错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2021-10-30
    • 2010-12-09
    • 2018-03-02
    • 2014-10-07
    相关资源
    最近更新 更多