Создание и запуск приложения GTK в Windows с помощью Meson

#c #windows #windows-10 #gtk #gtk3

#c #Windows #windows-10 #gtk #gtk3

Вопрос:

В настоящее время я не могу успешно запустить приложение, которое я успешно создал с помощью Meson. Для установки GTK я выполнил шаги, доступные здесь, чтобы установить его. Кроме того, я добавил путь C:msys64mingw64bin к своему path.

Внутри этого пути я смог успешно запустить приложения 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(amp;argc, amp;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:Usersmeprojbuilddirtest.exe .

Решив, что это проблема, вызванная попаданием в DLL-ад, я проверил свой path (нормально) и скопировал все библиотеки gtk DLL, которые смог найти в каталоге bin, в локальный builddir. Это тоже не сработало.

Я в растерянности — я просто хотел бы заставить это работать! Что я должен попытаться сделать, чтобы исправить это?

Ответ №1:

По общему признанию, это была очень сложная проблема для решения, и задать ее таким образом, чтобы получить ответ, было еще сложнее.

После нескольких дней удаления того немногого, что у меня осталось, я удалил builddir , переместил mingw64 двоичный путь выше в моей среде и приступил к его восстановлению.

Как оказалось, это, похоже, проблема с серверной частью clang, использующей ninja. Переключение серверной части на gcc (посредством перемещения mingw64/bin папки вверх) волшебным образом устранило проблему, несмотря на то, что я ничего не удалял из своих переменных окружения.

Я действительно ненавижу magic — но у меня нет дополнительных объяснений этому или причины, по которой clang произошел бы сбой и gcc сработало бы. Если бы кто-нибудь мог предложить улучшенный ответ, это было бы здорово. Я не мастер компиляции в отношении различных серверных частей C / C .