Susieti dvejetainį su bibliotekomis neprivaloma
Turinys
Man reikia šios parinkties sudarant tam tikrą programą, tačiau kai tai padarau, gaunu šią klaidą: gcc -static -O3 -o prog prog. Norint pasiekti statinį susiejimą, sistemoje turi būti jūsų bibliotekų archyvo. Jums reikia bent jau glibc-static paketo.
Jei norite naudoti -static, turite įsitikinti, kad turite įdiegtą statinę C bibliotekos versiją, kurią rasti gali būti keblu daugumoje sistemų nebėra statinės C bibliotekos. Arba turite atšaukti -static.
Tačiau pavyzdyje tai nugalėtų -static nes vienintelė susieta biblioteka yra netiesiogiai C biblioteka. Net jei nuorodos kode yra suformatuotos taip, kad jas reikia išspręsti vykdymo susieti dvejetainį su bibliotekomis neprivaloma, manau, kad turėtų būti įmanoma prie vykdomojo failo pridėti atitinkamas įprastas programas ir užtaisyti nuorodas, kad jos nurodytų į vykdomojo failo kodą.
Mano įspūdis pusiau informuotas yra tas, kad bendrose bibliotekose atskirų objektų failų nėra vienodai, taigi jūs gaunate visą partiją arba nieko negaunate. Drįstu teigti, kad gali būti įmanoma tiesiog susieti visą bendrinamą biblioteką su vykdomuoju failu, tačiau tai gali sukelti ir daug nenaudojamo kodo įkūrimą.
Žinau, kad kai kurios didžiosios įmonės nori naudoti statinį susiejimą viskam, kad netikėtų pokyčių rizika būtų mažesnė. Kaip kažkas pažymėjo kitame komentare, aštuntojo dešimtmečio nuorodos erzino ir po 30 metų vis dar erzina.
Ar yra kokia nors priežastis, dėl kurios jie turėtų būti? Bendrų bibliotekų pranašumas yra tas, kad pakeisdami bendrinamą biblioteką, visos programos, kurios naudojasi automatiškai, gauna naudos iš naujosios versijos klaidų taisymų.
Statinio susiejimo privalumai yra tai, kad jums nereikia jaudintis dėl bendro bibliotekos valdymo ir programa nesikeičia, nebent ją atstatysite. Jei eisite statiniu susiejimo keliu, galų gale reikės daugiau atminties kiekvienas skirtingas vykdomasis failas turi savo bendro kodo kopijątačiau žinote, kad programos neatsitiks netyčia. Autorius: Rosalie Crosby, Paštas.