我想在不使用MSYS2和Visual Studio的情况下用GTK+3编译一段代码。我得到了“未定义的引用”
首先,在官方页面上尝试了这个教程:https://www.gtk.org/download/windows.php,但是使用MSYS2很混乱;另外,我既不想要像linux这样的环境,也不想要像unix那样的环境( Visual Studio少很多)。
我下载了版本2的"all in one bundle“,设置了环境变量和其他所有东西。一切都很好,代码编译好了!(来自版本2的代码)。然后我尝试切换到版本3,从http://www.tarnyko.net/dl/gtk.htm下载了all in one bundle (64位)
当然,环境变量也更新了,编译行中的库的版本也更新了。该程序是针对版本3的,特别是在官方网站上的第一个版本:https://developer.gnome.org/gtk3/stable/gtk-getting-started.html。没有起作用。
然后,遵循以下教程:http://www.tarnyko.net/repo/gtk3_build_system/tutorial/gtk3_tutorial.htm
我使用以下命令的结果重写了编译行:pkg-config --cflags --libs gtk+-3.0 (正如上面的教程所述)
版本2 (works right)的编译行是:
gcc -Wall -g test.c -o test -mms-bitfields -Ic:/gtk/include/gtk-2.0 -Ic:/gtk/lib/gtk-2.0/include -Ic:/gtk/include/atk-1.0 -Ic:/gtk/include/cairo -Ic:/gtk/include/gdk-pixbuf-2.0 -Ic:/gtk/include/pango-1.0 -Ic:/gtk/include/glib-2.0 -Ic:/gtk/lib/glib-2.0/include -Ic:/gtk/include -Ic:/gtk/include/freetype2 -Ic:/gtk/include/libpng14 -Lc:/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl版本3(我正在询问的版本)的编译行是:
gcc -Wall -g iniciando.c -o iniciando -mms-bitfields -IC:/gtk3/include/gtk-3.0 -IC:/gtk3/include/cairo -IC:/gtk3/include/pango-1.0 -IC:/gtk3/include/atk-1.0 -IC:/gtk3/include/cairo -IC:/gtk3/include/pixman-1 -IC:/gtk3/include -IC:/gtk3/include/freetype2 -IC:/gtk3/include -IC:/gtk3/include/libpng15 -IC:/gtk3/include/gdk-pixbuf-2.0 -IC:/gtk3/include/libpng15 -IC:/gtk3/include/glib-2.0 -IC:/gtk3/lib/glib-2.0/include -LC:/gtk3/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl最后一个库( intl )一开始就出了问题,因为它不存在于它应该存在的地方,而且没有编译;我删除了它,得到了我要求的错误,然后从我的GTK 2复制了intl(只是为了看看发生了什么),错误是一样的。
我期望这个程序能够被编译;但是我得到的是:undefined reference to: 'gtk_main_quit' (和所有GTK函数)。
发布于 2019-06-27 17:42:39
首先,忘了使用GTK+ 2吧,一旦GTK+ 4发布,它就会被弃用(可能是今年夏天)。使用GTK+ 3,它已经稳定了很多年。
其次,忘掉Tarniko网站上的所有说明。虽然他当时做了很好的工作,但这些指令现在已经完全过时了,预编译的二进制文件是针对过时版本的GTK+ (3.6是在2012年9月发布的,而最新的版本是在2018年9月发布的3.24 )。
除了MSYS或vcpkg包提供的那些之外,没有官方的预编译二进制文件。您可能会发现更多最新的和非官方的包,like this one (从未尝试过),但从不受信任的来源获取二进制文件可能是一个安全问题。
接下来,如果你真的想构建一些东西,你需要一个工具链。您好像已经安装了gcc,您是怎么安装的?如果要使用预编译的二进制文件,则必须自行安装和配置工具链,因为这是特定于您的设置的。通常,为了避免兼容性问题,您需要用于构建依赖项的相同工具链,而这正是MSYS提供的。
最后,您可能只是从源代码构建整个东西,因为最新的GTK+版本可以使用Meson构建系统构建,该系统在Windows上应该构建得很好。
但说真的,如果你已经计划使用gcc,那就帮你自己一个忙,安装MSYS2吧。您将获得GTK+、工具链、绑定和其他工具,如glade和devhelp,如果您想要进行一些严肃的GTK+开发,则可能需要这些工具(至少对于Glade)。
https://stackoverflow.com/questions/56784001
复制相似问题