【问题标题】:Cross-compiling GTK on Fedora using MinGW使用 MinGW 在 Fedora 上交叉编译 GTK
【发布时间】:2011-12-02 16:14:08
【问题描述】:

我安装了 Fedora(最新)以及 mingw32 和 gtk 软件包。

我写了简单的Hello world:

#include <gtk/gtk.h>

int main(int argc, char* argv[]){
    GtkWidget *window;

    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);

    gtk_main();

    return 0;
}

我可以很容易地在 Fedora 下编译它:

gcc -o hello hello.c 'pkg-config --libs --cflags gtkmm-3.0'

(这里的撇号错误)

我还尝试为带有 i686-pg-mingw32-gcc simple.c -o simple.exe 的 windows 编译简单的 printf("Hello world"); 程序(不带 gtk),它在 Windows 下完美运行

但我不能使用 GTKmm 为 windows 进行交叉编译(即使是另一个版本的 GTK 的例子也会很棒)。我读了这个http://camltastic.blogspot.com/2008/10/mingw-compile-software-for-windows.html,但它使用了我的程序没有的配置和制作。

那里也有很多:http://ricardo.ecn.wfu.edu/~cottrell/cross-gtk/ 但它谈到自己将 mingw 安装到自定义文件夹等等......但我已经使用 Fedora yum 安装了 mingw。

更新

根据所有 rodrigo 的提示更新:

是的!我们得到了它!它正在工作。它首先启动控制台,但没关系。我还没有测试所有的 GTK 库,但我认为它们应该也可以工作。

经过一年的尝试,我终于拥有了它,并且我最接近开发 GUI 应用程序了。所以非常感谢您的耐心和指导。我想现在我也以某种方式理解了这一切是如何工作的(我的意思是,为不同的操作系统编译库、pkg-config、传递变量等)

【问题讨论】:

  • 额外提示:您可以删除将-mwindows(默认为-mconsole)传递给链接器命令的控制台。但我个人觉得在调试版本中查看 GLIB 警告和其他输出很有用。

标签: gtk mingw cross-compiling fedora gtkmm


【解决方案1】:

您已经从 Fedora 存储库安装了 mingw,但您仍然需要为 Windows 编译的 GTK 库。您可以自己编译它们(不是微不足道,但也不是非常困难),或者您可以在其他地方下载它们,正如您引用的页面所暗示的那样。

更新:关于您在以下 cmets 中的尝试:

我修复了复制到 /usr/lib/pkgconfig 的 pc 文件,这是我的日志:pastebin.com/KZr8tMQ0 我真的不明白。当我运行 pkg-config 时,它缺少 gobject。当我以 root 身份运行它时,它缺少 gdk。当我使用 gtkmm-3.0 运行它时,它会生成参数...当我使用 gtkmm-2.4 运行它时,即使 gtkmm-2.4 实际上是我在 PKG_CONFIG_PATH 中设置的文件夹中唯一的 gtkmm pc 文件,它也会崩溃。

  • 您没有适用于 Windows 的 gtk-3.0 或 gtkmm-3.0。因此,它说:在 pkg-config 搜索路径中找不到包 gtkmm-3.0 也就不足为奇了。使用pkg-config gtkmm-2.4 .
  • 您有 gtkmm-2.4 和适用于 Windows 的朋友,但缺少 gtk+-2.0(没有 gtk+-2.0.pc 文件)及其所有依赖项(pango、cairo、gdk、atk、glib...)。
  • 您不应运行 pkg-config 或使用 sudo 的编译器。出于安全原因,Sudo 不会转发大多数环境变量。这就是 sudo pkg-config 忽略您的 Windows 安装的原因。
  • 最后,PKG_CONFIG_PATH 用于添加额外的路径来搜索 .pc 文件。如果你所有的文件都在同一个目录下,设置PKG_CONFIG_LIBDIR就够了,但是你设置错了,应该是lib/pkgconfig目录。

【讨论】:

  • OK - 所以看来我必须下载 GTKmm 并为 Windows 编译它。因为建议的站点gimp.org/~tml/gimp/win32/downloads.html 已关闭。这里 (live.gnome.org/gtkmm/MSWindows) 只是 exe 安装程序。所以我必须使用这个资源ftp.gnome.org/pub/GNOME/sources/gtkmm/3.3 和这个手册live.gnome.org/gtkmm/MSWindows/BuildingGtkmm 自己创建GTKmm windows 版本?完成后......我将如何使用它来创建我的应用程序?
  • 如果您想像示例中那样使用pkg-config,只需导出PKG_CONFIG_PATH 环境变量以指向Windows 的*.pc 文件所在的位置。例如,在我的安装中,我有PKG_CONFIG_LIBDIR=$HOME/mingw/sysroot/mingw/lib/pkgconfig。然后运行i686-pg-mingw32-g++ -o test-gtk test-gtk.cpp 'pkg-config --libs --cflags gtkmm-3.0' 就可以了。
  • 所以我下载了适用于 Windows 的 GTKmm 安装程序,将其安装在 Windows 上,然后将整个文件夹复制到 Fedora。我在 GTKmm 安装的 ./lib/pkgconfig 中有 9 个 .pc 文件。我无法说服 pkg-config 使用该文件夹中的 pc 文件(尽管我设置了 PKG_CONFIG_PATH 和 PKG_CONFIG_LIBDIR 变量)所以我将这些 .pc 文件复制到 /usr/lib/pkgconfig (这是它获取文件的地方),但是当我现在尝试通过以下方式运行 pkg-config 时: sudo pkg-config --libs --cflags gtkmm-3.0 它告诉我“包 'gdkmm' 需要 'pangomm-1.4 >= 2.27.1' 但 Pangomm 的版本是2.8.8" 错误
  • 不要那样做!您正在为本机和交叉编译器环境混合 *.pc 文件。什么会坏的!导出 PKG_CONFIG_LIBDIR 应该可以工作。如果没有,请尝试手动执行 pkg-config 并发布结果。也许您必须编辑 .pc 文件来更改安装前缀。
  • 我修复了复制到 /usr/lib/pkgconfig 的 pc 文件,这是我的日志:pastebin.com/KZr8tMQ0 我真的不明白。当我运行pkg-config 时,它缺少gobject。当我以 root 身份运行它时,它缺少 gdk。当我使用gtkmm-3.0 运行它时,它会生成参数...当我使用gtkmm-2.4 运行它时,即使gtkmm-2.4 实际上是我在PKG_CONFIG_PATH 中设置的文件夹中唯一的gtkmm pc 文件,它也会崩溃。
猜你喜欢
  • 2012-01-13
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
相关资源
最近更新 更多