c - 使用 Meson 在 Windows 上构建和运行 GTK 应用程序
问题描述
我目前无法成功运行我使用 Meson 成功构建的应用程序。要安装 GTK,我按照此处提供的步骤进行安装。此外,我将路径添加C:\msys64\mingw64\bin
到我的路径中。
在该路径内,我能够成功运行应用程序gtk-demo.exe
, gtk3-demo.exe
,gtk3-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();
}
在我的运行ninja
中我builddir
得到以下输出:
[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 中。那也没有用。
我不知所措-我只想让它工作!我应该怎么做才能解决这个问题?
解决方案
诚然,这是一个非常难以解决的问题,并且以某种方式询问它以获得答案更加困难。
在拔掉我遗漏的小毛几天后,我删除了builddir
,在我的环境中将二进制路径移到mingw64
更高的位置,并着手重建它。
事实证明,这似乎是使用 ninja 的 clang 后端的问题。将后端切换到gcc
(通过mingw64/bin
向上移动文件夹)神奇地解决了问题,尽管我没有从环境变量中删除任何内容。
我真的很讨厌魔法——但我对此没有进一步的解释,也没有解释为什么clang
会失败并且gcc
会起作用的原因。如果有人可以提出改进的答案,那就太好了。对于各种 C/C++ 后端,我不是编译器向导。
推荐阅读
- angular - 需要在页面之间维护表单数据,而无需在 angular-ngrx 页面中向服务器/api 发送数据
- c# - 如何在父类的自定义用户控件中设置自定义验证错误模板的属性
- google-apps-script - 如何在 Google Sheet 中将多行单元格拆分为不同的行
- ios - 如何使 AVPlayerViewController 在不进行子类化的情况下自动旋转?
- c# - WPF DataTrigger 为 false,但不会恢复为以前的值
- python - 如何从具有其他变量的字符串中仅对大学名称进行子集化
- vue.js - 如何“锁定”Vuetify v-list-item-group 选择?
- version-control - Visual Studio 2019 无法使用与启动用户不同的用户凭据连接到团队资源管理器
- java - Spring:默认情况下,如何使用 CrudRepository 返回具有实体连接引用的所有对象
- javascript - 对于每个指定的(节点 env,express fr)路由发布请求,如何使全局 obj 的实例可以通过所有模块进行变异和可用?