autotools линковка с gtk

Модератор: Модераторы разделов

Аватара пользователя
RazorJack
Сообщения: 113
ОС: Gentoo 2008

autotools линковка с gtk

Сообщение RazorJack »

Вопрос про то, как соделать так, чтобы при конфигурации находилась бибилиотека gtk и инклуды к ней все это передавалось компилятору.
Вот файл configure.ac

Код: Выделить всё

AC_PREREQ([2.63])
AC_INIT([vsi], [0.0], [human45@yandex.ru])
AM_INIT_AUTOMAKE([vsi],[0.0])
AC_CONFIG_SRCDIR([vsi.c])
AC_LANG(C)

AC_PROG_CC

pkg_modules="gtk+-2.0"
PKG_CHECK_MODULES([vsi],[$pkg_modules])

AM_PROG_CC_C_O
AC_SUBST(VSI_CFLAGS)
AC_SUBST(VSI_LIBS)

AC_CONFIG_FILES([Makefile])
AC_OUTPUT

А вот файл Makefile.am

Код: Выделить всё

bin_PROGRAMS=vsi
vsi_SOURCES=vsi.c
vsi_LDADD=@VSI_LIBS@

теперь делаем

Код: Выделить всё

aclocal&&automake --add-missing&&autoconf&&./configure

Все проходит молча без сообщений (кроме ./configure конечно)
Теперь делаем make и видим это

Код: Выделить всё

$make
gcc -DPACKAGE_NAME=\"vsi\" -DPACKAGE_TARNAME=\"vsi\" -DPACKAGE_VERSION=\"0.0\" -DPACKAGE_STRING=\"vsi\ 0.0\" -DPACKAGE_BUGREPORT=\"human45@yandex.ru\" -DPACKAGE=\"vsi\" -DVERSION=\"0.0\" -I.    -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12   -g -O2 -MT vsi-vsi.o -MD -MP -MF .deps/vsi-vsi.Tpo -c -o vsi-vsi.o `test -f 'vsi.c' || echo './'`vsi.c
vsi.c: В функции ‘main’:
vsi.c:19: предупреждение: несовместимый тип указателя в присваивании
vsi.c:20: предупреждение: в передаче аргумента 1 ‘gtk_widget_show’: несовместимый тип указателя
mv -f .deps/vsi-vsi.Tpo .deps/vsi-vsi.Po
gcc -D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12   -g -O2   -o vsi vsi-vsi.o
vsi-vsi.o: In function `main':
/home/razor/work/installer/vsi.c:15: undefined reference to `gtk_init'
/home/razor/work/installer/vsi.c:19: undefined reference to `gtk_about_dialog_new'
/home/razor/work/installer/vsi.c:20: undefined reference to `gtk_widget_show'
...
vsi-vsi.o: In function `main_window_destroy':
/home/razor/work/installer/vsi.c:10: undefined reference to `gtk_main_quit'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [vsi] Ошибка 1

Как можно видеть инклуды добавились а вот линковать не линкует
Ткните носом!
Спасибо.
Спасибо сказали:
Аватара пользователя
RazorJack
Сообщения: 113
ОС: Gentoo 2008

Re: autotools линковка с gtk

Сообщение RazorJack »

Если кому то интересно я решил проблему вот правильные
configure.ac

Код: Выделить всё

AC_PREREQ([2.63])
AC_INIT([vsi], [0.0], [human45@yandex.ru])
AM_INIT_AUTOMAKE([vsi],[0.0])
AC_CONFIG_SRCDIR([vsi.c])
AC_LANG(C)
AC_PROG_INSTALL


# Checks for programs.
AC_PROG_CC
# Checks for libraries.
pkg_modules="gtk+-2.0"
PKG_CHECK_MODULES([vsi],[$pkg_modules])
AM_PROG_CC_C_O
AC_OUTPUT(Makefile)

Makefile.am

Код: Выделить всё

bin_PROGRAMS=vsi
vsi_SOURCES=vsi.c
vsi_LDADD=@vsi_LIBS@

Все дело было в последней строке Makefile.am дело в том что имена макросов иногда тлолько в верхнем регистре гегерируются а в данном случае пчему-то в нижнем тоже. Очень сумбурная система GNU Autotools
Спасибо сказали: