c - 使用 Meson 在 Windows 上构建并运行 GTK 应用程序

标签 c windows windows-10 gtk gtk3

我目前无法成功运行我使用 Meson 成功构建的应用程序。要安装 GTK,我遵循了可用的步骤 here以便安装它。此外,我将路径 C:\msys64\mingw64\bin 添加到我的路径中。

在该路径内,我能够成功运行应用程序 gtk-demo.exegtk3-demo.exegtk3-demo- application.exe 这将向我表明它安装成功。

我开始构建 Meson 教程中提供的示例应用程序:

#include<gtk/gtk.h>

int main(int argc, char **argv) {
  GtkWidget *win;
  gtk_init(&argc, &argv);
  win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(win), "Hello there");
  g_signal_connect(win, "destroy", G_CALLBACK(gtk_main_quit), NULL);
  gtk_widget_show(win);
  gtk_main();
}

在我的 builddir 中运行 ninja 我得到以下输出:

[1/1] Linking target test.exe.
LINK : warning LNK4044: unrecognized option '/-no-undefined'; ignored
LINK : warning LNK4044: unrecognized option '/-as-needed'; ignored
LINK : warning LNK4044: unrecognized option '/-start-group'; ignored
LINK : warning LNK4044: unrecognized option '/luuid'; ignored
LINK : warning LNK4044: unrecognized option '/-end-group'; ignored

但是,在运行它时,我遇到了以下错误:

The procedure entry point g_application_get_type could not be located in the dynamic link library C:\Users\me\proj\builddir\test.exe.

考虑到这是由于陷入 DLL hell 而导致的问题,我检查了我的路径(很好),并将 bin 目录中可以找到的所有 gtk dll 复制到本地 builddir 中。这也不起作用。

我不知所措 - 我只想让它发挥作用!我应该如何解决这个问题?

最佳答案

诚然,这是一个非常难以解决的问题,并且以某种方式询问它以获得答案更加困难。

经过几天的努力,我删除了 builddir,将 mingw64 二进制路径移到了环境中的更高位置,然后开始重建它。

事实证明,这似乎是使用 ninja 的 clang 后端的问题。将后端切换到 gcc(通过向上移动 mingw64/bin 文件夹)神奇地解​​决了问题,尽管我没有从环境变量中删除任何内容。

我真的很讨厌魔法 - 但我对此没有进一步的解释,也没有解释为什么 clang 会失败而 gcc 可以工作。如果有人能提出改进的答案,那就太好了。我不是各种 C/C++ 后端的编译器向导。

关于c - 使用 Meson 在 Windows 上构建并运行 GTK 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55147480/

相关文章:

C程序不断关闭

c - 了解在 C 中使用双指针创建单向链表的代码

windows - Windows 中命令 cd/d %~dp0 是什么意思

c - 在 Windows 中使用带有 C 的 fopen 打开长文件名

windows-10 - 如何在我的 Electron 应用程序的标题中放置一个空格?

c++ - 如何使用 C 或 C++ 从 dll 中读取导出表?

java - CLI 中的 JUnit 测试等效项

c++ - Visual Studio 2017 C++ 项目中的 Libavcodec "the procedure entry point for av_frame_alloc could not be located"错误

python - 为什么 platform.release() 在 Windows 10 中返回 "8"?

c - 如何检查字符串匹配格式 "printf like - %d/..."