Linkar as Bibliotecas ou Dependências de um programa em C

1. Linkar as Bibliotecas ou Dependências de um programa em C

Apprentice X
ApprenticeX

(usa Slackware)

Enviado em 25/01/2022 - 03:24h

Bom dia a Todos

Estou com dificuldade criar o comando necessário pra compilar meu programa em C ou C++ para que ele possa rodar em outro Linux.
Tentei me basear nos links que vi aqui no VOL e alguns outros na Internet. Mas não consegui entender direito, e nem consegui fazer funcionar nenhum comando: https://www.vivaolinux.com.br/topico/C-C++/Compilar-e-Trazer-dependencias-Ou-seja-o-Binario-completo...

Eu entendi que desejo que meu binário aumente de tamanho contendo todas as bibliotecas que precisa pra rodar em outro sistema, dessa forma eu teria apenas o binário! Entendi que isso seria Linkar como Biblioteca Estática!
As bibliotecas estáticas são ligadas ao programa e fazem parte do arquivo executável.

Então tentei o seguinte comando sem sucesso, apresenta uma lista enorme de erros no terminal, resumi bastante aqui a lista
g++ -static test.cpp -L/mnt/myproject -o test -static -mcmodel=medium -lfltk -lfltk_images -O3 -Wall -pedantic -pedantic-errors -Werror

/usr/bin/ld: Fl_PNG_Image.cxx:(.text._ZN12Fl_PNG_Image9load_png_EPKcPKhi+0x406): undefined reference to `png_get_bit_depth'
/usr/bin/ld: Fl_PNG_Image.cxx:(.text._ZN12Fl_PNG_Image9load_png_EPKcPKhi+0x418): undefined reference to `png_set_strip_16'
/usr/bin/ld: Fl_PNG_Image.cxx:(.text._ZN12Fl_PNG_Image9load_png_EPKcPKhi+0x43d): undefined reference to `png_destroy_read_struct'
/usr/bin/ld: Fl_PNG_Image.cxx:(.text._ZN12Fl_PNG_Image9load_png_EPKcPKhi+0x4ce): undefined reference to `png_set_tRNS_to_alpha'
/usr/bin/ld: Fl_PNG_Image.cxx:(.text._ZN12Fl_PNG_Image9load_png_EPKcPKhi+0x50b): undefined reference to `png_set_longjmp_fn'
collect2: error: ld returned 1 exit status

Rodei ldd pra ver o que meu programa precisa e tudo está em /usr/lib64
ldd tests
linux-vdso.so.1 (0x00007fffe29ec000)
libfltk.so.1.4 => /usr/lib64/libfltk.so.1.4 (0x00007f44c210b000)
libfltk_images.so.1.4 => /usr/lib64/libfltk_images.so.1.4 (0x00007f44c20e1000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f44c1f01000)
libm.so.6 => /lib64/libm.so.6 (0x00007f44c1db4000)
libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f44c1d9a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f44c1bb5000)
libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x00007f44c19a9000)
libXcursor.so.1 => /usr/lib64/libXcursor.so.1 (0x00007f44c199d000)
libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x00007f44c1797000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f44c1783000)
libpangoxft-1.0.so.0 => /usr/lib64/libpangoxft-1.0.so.0 (0x00007f44c1778000)
libpangoft2-1.0.so.0 => /usr/lib64/libpangoft2-1.0.so.0 (0x00007f44c1761000)
libpango-1.0.so.0 => /usr/lib64/libpango-1.0.so.0 (0x00007f44c1717000)
libgobject-2.0.so.0 => /usr/lib64/libgobject-2.0.so.0 (0x00007f44c16bc000)
libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007f44c1598000)
libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00007f44c1552000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007f44c1496000)
libXft.so.2 => /usr/lib64/libXft.so.2 (0x00007f44c147e000)
libXinerama.so.1 => /usr/lib64/libXinerama.so.1 (0x00007f44c1279000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f44c1257000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f44c1252000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f44c1114000)
libjpeg.so.62 => /usr/lib64/libjpeg.so.62 (0x00007f44c107d000)
libpng16.so.16 => /usr/lib64/libpng16.so.16 (0x00007f44c1048000)
libz.so.1 => /lib64/libz.so.1 (0x00007f44c0e2f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f44c226d000)
libharfbuzz.so.0 => /usr/lib64/libharfbuzz.so.0 (0x00007f44c0d2b000)
libfribidi.so.0 => /usr/lib64/libfribidi.so.0 (0x00007f44c0d0d000)
libgthread-2.0.so.0 => /usr/lib64/libgthread-2.0.so.0 (0x00007f44c0d08000)
libffi.so.6 => /usr/lib64/libffi.so.6 (0x00007f44c0b00000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f44c0a8b000)
libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00007f44c0a5e000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f44c0a55000)
libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f44c0a42000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f44c0a19000)
libgraphite2.so.3 => /usr/lib64/libgraphite2.so.3 (0x00007f44c09f0000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f44c09eb000)
libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00007f44c09e3000)

Ou Seja, não estou sabendo montar o comando de forma correta para que ele funcione!


  


2. Re: Linkar as Bibliotecas ou Dependências de um programa em C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 29/01/2022 - 17:42h

Essas funções cujo nome começa com “png_” provavelmente não estão definidas nas bibliotecas do FLTK, mas sim na biblioteca de PNG (ao que parece, na libpng16, de modo que você possivelmente terá de incluir o argumento “-lpng16” na sua linha de comando de geração do executável).


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)