Начиная с предложения @William Pursell, я искал решение. Этот ответ несколько подробный, потому что я чувствую необходимость обосновать, почему я не принимаю эту полезную должность в качестве ответа.
Примечание: Если вы ищете магические линии, просто перейдите в раздел «Решение» в конце.
Попытка предложенное решение
Я попытался решение Уильям Перселл, но нашел проблему: GCC 4.6.1 специально требуя при работе с упорядочением некоторых параметров. Поэтому, когда я установить переменные, как показано ниже:
secretary_CPPFLAGS = @[email protected] # DOES NOT WORK!
secretary_LDFLAGS = @[email protected] # DOES NOT WORK!
я получил следующее gcc
вызова строки:
gcc -std=gnu99 -g -O2 -pthread -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 \
-lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 \
-lfreetype lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt \
-lglib-2.0 -o secretary secretary-secretary.o
где библиотеки передаются компилятору перед код .o
объекта. НКУ не принял его и дал мне эту ошибку:
secretary-secretary.o: In function `main':
/home/adam/software/secretary-gtk/secretary.c:4: undefined reference to `gtk_init'
/home/adam/software/secretary-gtk/secretary.c:5: undefined reference to `gtk_window_new'
/home/adam/software/secretary-gtk/secretary.c:6: undefined reference to `gtk_widget_show'
/home/adam/software/secretary-gtk/secretary.c:7: undefined reference to `gtk_main'
следующие исследования
ищет решение, я обнаружил, что @ uidzer0 было the same problem и решить ее - но не опубликовать подробное объяснение ... Поэтому я пошел посмотреть на his project.Я смотрел на его configure.ac
, где я нашел использование PKG_CHECK_MODULES
:
PKG_CHECK_MODULES([FUSE], [fuse >= 2.8.3])
PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.22.5])
PKG_CHECK_MODULES([GTHREAD], [gthread-2.0])
PKG_CHECK_MODULES([CURL], [libcurl >= 7.16.0])
Так что я искал, где были использованы сгенерированные переменные (FUSE_LIBS
и т.д.). Я нашел их в файле src/Makefile.am
:
stormfs_CFLAGS = -D_REENTRANT \
-DFUSE_USE_VERSION=26 \
-D_FILE_OFFSET_BITS=64 \
-DSYSCONFDIR=\"${sysconfdir}\" \
${FUSE_CFLAGS} \
${CURL_CFLAGS} \
${GLIB_CFLAGS} \
${GTHREAD_CFLAGS}
stormfs_LDADD = ${LIBS} \
${FUSE_LIBS} \
${CURL_LIBS} \
${GLIB_LIBS} \
${GTHREAD_LIBS}
Решение
Так я заключаю я должен установить не в *_CPPFLAGS
/*_LDFLAGS
но вместо *_CFLAGS
и *_LDADD
флагов. Мой результат (рабочая) конфигурация, то есть:
bin_PROGRAMS = secretary
secretary_SOURCES = secretary.c
secretary_CFLAGS = @[email protected]
secretary_LDADD = @[email protected]
Вы не должны '' AC_SUBST' GTK_CFLAGS' и 'GTK_LIBS' как' PKG_CHECK_MODULES' уже делает это для вас. –