koppeling van statische bibliotheek in plaats van dynamisch

Ik heb een map met de naam FOO met X.a en X.so. Ik wil alleen X.a. kiezen. Dus in mijn makefile gebruik ik het volgende om het te linken

EXE: OBJ.o
     g++ -L/PATH/TO/FOO -o [email protected] $< -static -lX

Maar als ik dat doe, krijg ik de volgende foutmelding

/usr/bin/ld: cannot find -lstdc++
/usr/bin/ld: cannot find -lm
/usr/bin/ld: cannot find -lc

Hoe moet dit goed worden gedaan. Eén manier is om het abs-pad van X.a. Is er een andere manier?

2
De linker heeft geen probleem bij het vinden van X.a, het klaagt over andere libs. Ik denk dat je ook het pad hieraan moet toevoegen (met -L).
toegevoegd de auteur kol, de bron

2 antwoord

Probeer dit:

EXE: OBJ.o
     g++ -L/PATH/TO/FOO -o [email protected] $< -Wl,-Bstatic -lX -Wl,-Bdynamic
2
toegevoegd
-Wl, -Bestand : -Wl betekent dat de vlag naar de linker moet worden verzonden en -Bestand statische koppeling wordt ingeschakeld. -lx is de normale te linken vlag in libX . -Wl, -Bdynamic verzendt de -Bdynamic vlag naar de linker, dynamisch koppelen van alle andere bibliotheken.
toegevoegd de auteur Jack Kelly, de bron
Bedankt Jack ... Het werkte ... Zou je de betekenis van -Wl, -Bestand -lx-Wl, -Bdynamisch kunnen uitleggen?
toegevoegd de auteur amneet, de bron

Als ik de documentatie voor ld goed lees, hoeft u het absolute pad niet op te geven, maar u kunt een bibliotheek opgeven met de volledige naam als zodanig:

EXE: OBJ.o
     g++ -L/PATH/TO/FOO -o [email protected] $< -l:X.a
0
toegevoegd
U moet de volledige naam van de bibliotheek opgeven, dus het moet -l: libX.a zijn
toegevoegd de auteur pat, de bron
Tenminste betekent dit dat de linker nu probeert te koppelen aan de statische bibliotheek, zoals je wilt; helaas kan het het niet vinden. Weet je zeker dat het pad naar de -L-switch correct is?
toegevoegd de auteur eriktous, de bron
Dit werkt niet. Fout: /usr/bin/ld: kan X.a niet vinden
toegevoegd de auteur amneet, de bron
ja, ik ben er vrij zeker van.
toegevoegd de auteur amneet, de bron