AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1499489
Accepted
Holger
Holger
Asked: 2024-01-09 18:50:46 +0800 CST2024-01-09 18:50:46 +0800 CST 2024-01-09 18:50:46 +0800 CST

Compilando com Libadwaita, GTK4 e C

  • 772

Após instalar o pacote libadwaita-1-dev no Ubuntu 23.10, tentei compilar o exemplo da documentação oficial :

 gcc $(pkg-config --cflags --libs gtk4) $(pkg-config –-cflags --libs libadwaita-1) hello-adwita.c -o hello

Infelizmente, não funcionou. A mensagem de erro é:

/usr/bin/ld: /tmp/cccNMYti.o: in function `glib_autoptr_clear_GtkApplication':
hello-adwita.c:(.text+0x1b): undefined reference to `g_object_unref'
/usr/bin/ld: /tmp/cccNMYti.o: in function `activate_cb':
hello-adwita.c:(.text+0x77): undefined reference to `gtk_application_window_new'
/usr/bin/ld: hello-adwita.c:(.text+0x8a): undefined reference to `gtk_label_new'
/usr/bin/ld: hello-adwita.c:(.text+0x93): undefined reference to `gtk_window_get_type'
/usr/bin/ld: hello-adwita.c:(.text+0xa5): undefined reference to `g_type_check_instance_cast'
/usr/bin/ld: hello-adwita.c:(.text+0xba): undefined reference to `gtk_window_set_title'
/usr/bin/ld: hello-adwita.c:(.text+0xbf): undefined reference to `gtk_window_get_type'
…

Alguém tem alguma ideia de qual poderia ser o motivo?

gnome
  • 2 2 respostas
  • 43 Views

2 respostas

  • Voted
  1. Best Answer
    steeldriver
    2024-01-09T19:53:47+08:002024-01-09T19:53:47+08:00

    A questão aqui é a ordem em que seu gcccomando expande as bibliotecas necessárias. Em particular, os símbolos são resolvidos da esquerda para a direita, portanto, se o seu código depende libawaita-1e libawaita-1depende, por sua vez, das gtk-4bibliotecas, a ordem deve ser

    hello-adwaita.c   <---  libadwaita-1   <--- libgtk-4
    

    Então

    gcc hello-adwaita.c -o hello $(pkg-config --cflags --libs libadwaita-1) $(pkg-config --cflags --libs gtk4)
    

    No entanto, neste caso, a saída pkg-config --libs libadwaita-1contém libgtk4 e todas as suas bibliotecas dependentes, então tudo que você precisa é

    gcc hello-adwaita.c -o hello $(pkg-config --cflags --libs libadwaita-1)
    

    Para mais informações consulte

    • Por que a ordem em que as bibliotecas são vinculadas às vezes causa erros no GCC?
    • 2
  2. ebassi
    2024-01-09T19:21:46+08:002024-01-09T19:21:46+08:00

    Essa não é uma linha de comando válida do compilador: você está passando os sinalizadores do compilador e do vinculador ao mesmo tempo e no lugar errado. Os sinalizadores do compilador vão primeiro, seguidos pelo arquivo de saída e pelo arquivo de entrada; então, você precisa passar os sinalizadores do vinculador:

    gcc ${compiler_flags} -o ${output} ${input} ${linker_flags}
    

    Você também está duplicando o compilador GTK e os sinalizadores do vinculador: libadwaita já depende do GTK.

    Resumindo:

    gcc $( pkg-config --cflags libadwaita-1 ) -o hello hello.c $( pkg-config --libs libadwaita-1)
    
    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve