Я строю программу, которая использует GTK + 3 и панорамирование go. Большинство из них прекрасно компилируется, кроме последнего бита, который создает исполняемый файл. Последняя команда:
gcc -o z80sim main.c -Wall -Iz80 -Igui obj/disas.o obj/iosim.o obj/sim0.o obj/sim1.o obj/sim2.o obj/sim3.o obj/sim4.o obj/sim5.o obj/sim6.o obj/sim7.o obj/simctl.o obj/simfun.o obj/simglb.o obj/simint.o obj/callbacks.o obj/code.o obj/guiglb.o obj/memory.o obj/flags.o obj/log.o obj/ports.o obj/registers.o `pkg-config --cflags --libs gtk+-3.0`
Но я получаю это сообщение об ошибке:
obj/sim1.o: In function `cpu':
sim1.c:(.text+0x2cb): undefined reference to `check_gui_break'
obj/callbacks.o: In function `on_open1_activate':
callbacks.c:(.text+0x20): undefined reference to `Get_File'
:
:
Где check_gui_break определяется и вызывается в sim1. c et c.
Это должно быть как-то связано с упорядочением объектных файлов и библиотек при вызове ld, но я попытался поместить часть pkg-config до и после отдельных файлов .o, и она по-прежнему выдает те же ошибки.
Я прочитал очень информативный https://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking, но, хотя теперь я знаю намного больше, я все еще не могу взломать это.
Кстати.
pkg-config --cflags --libs gtk+-3.0
дает
-pthread -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
Пожалуйста, пожалеет ли какая-нибудь добрая душа ко мне и просветит меня?