1

Я пытаюсь скомпилировать простое приложение GTK для тестирования на машине Trisquel 7. Пакеты взяты из Ubuntu 14.04 LTS. У меня установлен libgtk2.0-dev , но когда я пытаюсь скомпилировать, это результат.

$ gcc -Wall -Wextra -std=c11 `pkg-config --libs --cflags gtk+-2.0` main.c
a_out-main.o: In function `main':
/home/mac/c/main.c:7: undefined reference to `gtk_init'
/home/mac/c/main.c:9: undefined reference to `gtk_window_new'
/home/mac/c/main.c:10: undefined reference to `gtk_window_get_type'
/home/mac/c/main.c:10: undefined reference to `g_type_check_instance_cast'
/home/mac/c/main.c:10: undefined reference to `gtk_window_set_title'
/home/mac/c/main.c:11: undefined reference to `g_type_check_instance_cast'
/home/mac/c/main.c:11: undefined reference to `gtk_window_set_default_size'
/home/mac/c/main.c:12: undefined reference to `g_type_check_instance_cast'
/home/mac/c/main.c:12: undefined reference to `gtk_window_set_position'
/home/mac/c/main.c:13: undefined reference to `gtk_widget_show'
/home/mac/c/main.c:15: undefined reference to `g_type_check_instance_cast'
/home/mac/c/main.c:15: undefined reference to `gtk_main_quit'
/home/mac/c/main.c:15: undefined reference to `g_signal_connect_data'
/home/mac/c/main.c:18: undefined reference to `gtk_main'

Я проверил вывод pkg-config --libs --cflags gtk+-2.0 , и он выглядит корректно, но по какой-то причине он неправильно связывается.

2 ответа2

3

Поставьте галочки, содержащие команду pkg-config, в конце строки. По какой-то причине, gcc читает его правильно, только если он последний. У меня была та же самая проблема сегодня, когда я пытался создать примеры из репозитория GTK. Линия в их make-файлах,

$(CC) -o $(@F) $(LIBS) $(OBJS)

должно быть

$(CC) -o $(@F) $(OBJS) $(LIBS)

вместо.

1

Я считаю, что проблема в том, что компоновщик однопроходный. Т.е. он должен увидеть ссылку, прежде чем найдет свое определение. Таким образом, бит pkg-config, в котором указаны определения, должен идти после main.c, где есть ссылки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .