使用 Meson 在 Windows 上构建和运行 GTK 应用程序
Posted
技术标签:
【中文标题】使用 Meson 在 Windows 上构建和运行 GTK 应用程序【英文标题】:Building and Running GTK application on Windows with Meson 【发布时间】:2019-03-13 17:01:43 【问题描述】:我目前无法成功运行我使用 Meson 成功构建的应用程序。要安装 GTK,我按照可用的步骤here 进行安装。此外,我将路径 C:\msys64\mingw64\bin
添加到我的路径中。
在该路径内,我能够成功运行应用程序gtk-demo.exe
、gtk3-demo.exe
和gtk3-demo-application.exe
,这表明它已成功安装。
我着手构建介子教程中提供的示例应用程序:
#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
然而,在运行它时,我遇到了以下错误:
程序入口点g_application_get_type在动态链接库C:\Users\me\proj\builddir\test.exe中找不到。
认为这是由于陷入 DLL 地狱而导致的问题,我检查了我的路径(很好),并将我可以在 bin 目录中找到的所有 gtk dll 复制到本地 builddir 中。那也没用。
我不知所措 - 我只想让它工作!我应该怎么做才能解决这个问题?
【问题讨论】:
【参考方案1】:诚然,这是一个非常难以解决的问题,而以某种方式询问它以获得答案更加困难。
几天后,我删除了我遗漏的小毛,删除了builddir
,将mingw64
binary 路径移到我的环境中更高的位置,并着手重建它。
事实证明,这似乎是使用 ninja 的 clang 后端的问题。将后端切换到gcc
(通过向上移动mingw64/bin
文件夹)神奇地解决了这个问题,尽管我没有从我的环境变量中删除任何东西。
我真的很讨厌魔法——但我没有对此做进一步的解释,也没有解释为什么clang
会失败而gcc
会起作用。如果有人可以提出改进的答案,那就太好了。对于各种 C/C++ 后端,我不是编译器向导。
【讨论】:
以上是关于使用 Meson 在 Windows 上构建和运行 GTK 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Travis-ci windows meson+ninja build install (python 坏了)