È possibile modificare il file .pc
per supportare il collegamento statico, soprattutto se si è in grado di compilare, applicare patch e installare il software da soli anziché affidarsi a una distribuzione Linux.
Questo è un esempio di file .pc
che supporta sia il collegamento dinamico che statico. Questo è preso dal /usr/lib/x86_64-linux-gnu/pkgconfig/xcb.pc
sul mio sistema Ubuntu:
prefix=/usr
exec_prefix=${prefix}
libdir=${prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include
xcbproto_version=1.11
Name: XCB
Description: X-protocol C Binding
Version: 1.11.1
Requires.private: pthread-stubs xau >= 0.99.2 xdmcp
Libs: -L${libdir} -lxcb
Libs.private:
Cflags: -I${includedir}
Se si esegue pkg-config --libs xcb
, si presuppone che si desidera che la versione dinamica e ti dà solo -lxcb
. L'oggetto dinamicamente condiviso xcb.so
saprà come caricare tutte le sue dipendenze in modo da non doverle specificare durante il collegamento con esso.
Se si esegue pkg-config --libs xcb --static
, i campi .private
entrano in gioco e si ottiene -lxcb -lXau -lXdmcp
.
Non ho incontrato molti sistemi di compilazione che sanno passare l'argomento --static
a pkg-config
. Pertanto, se il tuo file .pc
è destinato esclusivamente al collegamento statico, è probabilmente preferibile non utilizzare i campi .private
e fornire solo tutte le dipendenze che le persone avranno bisogno incondizionatamente. In questo modo le persone possono collegarsi alla libreria con successo anche se non sanno che è statico o non sanno passare lo --static
a pkg-config
.
fonte
2017-08-01 19:43:09
È interessante. È un'opzione documentata? Linker I have (from clang?) Non sembra supportarlo: "ld: library not found for -l: libpng16.a". – Kornel
@porneL, sì, è documentato. Ho modificato in una citazione dal manuale. –