Não é possível compilar o aplicativo GTK +

1

Estou tentando compilar um aplicativo GTK simples para testar em uma máquina Trisquel 7. Os pacotes são derivados do Ubuntu 14.04 LTS. Eu tenho libgtk2.0-dev instalado, mas quando tento compilar, este é o resultado.

$ 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'

Eu verifiquei a saída de pkg-config --libs --cflags gtk+-2.0 e ela parece correta, mas, por algum motivo, ela não está sendo vinculada corretamente.

    
por 2mac 15.10.2014 / 16:30

2 respostas

3

Coloque os backticks contendo o comando pkg-config no final da linha. Por alguma razão, o gcc apenas o lê corretamente se for o último. Eu tive exatamente o mesmo problema hoje tentando construir exemplos do repositório GTK. A linha em seus makefiles,

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

deve ser

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

em vez disso.

    
por 28.01.2015 / 21:32
1

Eu acredito que o problema é que o linker é single-pass. Ou seja, deve ver uma referência antes de encontrar sua definição. Assim, o bit pkg-config, onde as definições são apontadas, deve vir depois de main.c, onde estão as referências.

    
por 24.10.2015 / 20:48