Tuesday, 31 October 2017

Make statiskt edin binära alternativ


Syftet med detta dokument Skriv ett bibliotek Låt oss skriva en enkel kod för AddNumbers-biblioteket som tillåter att lagra och lägga till två heltal. Den består av både gränssnitt och källfiler. Skapa ett statiskt bibliotek Först omvandlas källfilen srcAddNumbers. cpp till en objektfil. Ett statiskt bibliotek är i grunden en uppsättning objektfiler som kopierades till en enda fil. Den är skapad med hjälp av arkiveraren ar. Bibliotekets namn måste börja med de tre bokstäverna lib och ha suffixet. a. Du kan också skriva liknande regler i en makefile. Se filen Makefile. static som ges i AddNumbers. tar. bz2 arkivet. Skapa ett delat bibliotek Den - fpic-alternativet berättar g att skapa positionsoberoende kod som behövs för delade bibliotek. Slutligen skapas det delade biblioteket. Observera att bibliotekets namn måste börja med de tre bokstäverna lib och ha suffixet. so. Som ett makefile-exempel, se filen Makefile. shared som ges i AddNumbers. tar. bz2-arkivet. C-symboler Kommandon nm och cfilt tillåter att lista och demangle C-symboler från objektfiler. Låt oss försöka dessa kommandon med det statiska biblioteket libAddNumbers. a. Det betyder att biblioteket libAddNumbers. a har byggts med objektet AddNumbers. o som innehåller några symboler. Första kolumnen är symbolvärdet (det representerar läget för symbolen i biblioteket). Den andra kolumnen är symboltypen. Och den tredje kolumnen är symbolnamnet. Se följande tabell som beskriver några vanliga symboltyper. Symbolen är en svag symbol som inte har tagits specifikt som en svag objektsymbol. När en svag definierad symbol är kopplad till en normal definierad symbol används den normala definierade symbolen utan något fel. När en svag odefinierad symbol är länkad och symbolen inte definieras, bestäms symbolens värde på ett systemspecifik sätt utan fel. Storlek anger att ett standardvärde har angetts. Symboltypen är okänd. eller objektfilformat specifikt. Se nm-manualen för mer information. Symboler är inte mänskliga förståeligt. Det är med det faktum att C-språk ger överbelastning av funktionen, vilket innebär att du kan skriva många funktioner med samma namn (förutsatt att varje tar parametrar av olika typer). Alla C-funktionsnamn är kodade till en lågnivåmonteringsetikett (denna process kallas mangling). Cfiltprogrammet gör den inversa kartläggningen: den avkodar (demangling process) lågnivå namn till användarnivå namn. Programmet nm tillåter att direkt avmarkera symboler med hjälp av - C-alternativet. Använda bibliotek I det här avsnittet beskrivs hur du använder statiska eller delade bibliotek i program. Först måste vi skapa ett huvudprogram. För att länka det här programmet mot det statiska biblioteket skriver du följande kommando som sammanställer och länkar huvudkörningen. Observera att de tre första bokstäverna lib samt suffixet. a inte är angivna för bibliotekets namn. Nu kan programmet AddNumbersClientstatic exekveras. För att länka mot det delade biblioteket, skriv följande kommando. De tre första bokstäverna lib samt suffixet. so är inte angivna för bibliotekets namn. För att köra programmet AddNumbersClientshare måste du berätta för LDLIBRARYPATHs miljövariabel där det gemensamma biblioteket hittades. I den riktiga världen är det bättre att använda en absolut väg för LDLIBRARYPATH. Som makefile-exempel, se Makefile. static och Makefile. shared-filer som ges i AddNumbersClient. tar. bz2-arkivet. Lista över delade bibliotek Kommandot ldd skriver ut de delade biblioteken som krävs av varje program eller delat bibliotek som anges på kommandoraden. Användbara alternativ av GNU ar-programmet skapar, ändrar och extraherar från arkiv. Ett arkiv är en enda fil som innehåller en samling andra filer i en struktur som gör det möjligt att hämta de ursprungliga enskilda filerna (kallad medlem s i arkivet). De ursprungliga filerna innehåll, tillstånd (behörigheter), tidstämpel, ägare och grupp bevaras i arkivet och kan återställas vid utvinning. Användbara alternativ för nm Användbar linksconfigure - Konfigurera källträdet Konfigurationsskriptet konfigurerar källträdet för att kompilera och installera Apache HTTP Server på din specifika plattform. Olika alternativ möjliggör sammansättning av en server som motsvarar dina personliga krav. Detta skript, som ingår i källkods källkods rotkatalog, är endast för sammansättning på Unix och Unix-liknande system. För andra plattformar, se plattformens dokumentation. Du borde ringa konfigurationsskriptet från distributionsens rotkatalog..konfigurera OPTION. VAR VALUE. För att tilldela miljövariabler (t. ex. CC. CFLAGS.), Ange dem som VAR VALUE. Se nedan för beskrivningar av några av de användbara variablerna. Följande alternativ påverkar beteendet att konfigurera sig själv. - C - config-cache Detta är ett alias för --cache-fileconfig. cache - cache-file FIL Testresultaten kommer att cachas i fil FILE. Detta alternativ är avstängt som standard. - h --hjälpa shortrecursive Utför hjälp och avsluta. Med argumentet visas bara de alternativ som är specifika för detta paket. Argumentet rekursivt visar kort hjälp av alla medföljande paket. - n - nej-skapa Konfigurationsskriptet körs normalt men skapar inte utdatafiler. Detta är användbart för att kontrollera testresultaten innan du genererar makefiles för sammanställning. - q - quiet Skriv inte ut kontroll. meddelanden under konfigurationsprocessen. --srcdir DIR Definierar katalog DIR som källkatalog. Standard är katalogen där konfigurationen finns, eller moderkatalogen. --silent Samma som --quiet - V --version Visa copyright information och avsluta. Dessa alternativ definierar installationskatalogen. Installationsträdet beror på den valda layouten. --prefix PREFIX Installera arkitekturoberoende filer i PREFIX. Som standard är installationskatalogen inställd på usrlocalapache2. --exec-prefix EPREFIX Installera arkitekturberoende filer i EPREFIX. Som standard är installationskatalogen inställd på PREFIX-katalogen. Som standard gör installationen installera alla filer i usrlocalapache2bin. usrlocalapache2lib etc. Du kan ange ett installationsprefix annat än usrlocalapache2 med --prefix. till exempel --prefixHOME. --enlig layout LAYOUT Konfigurera källkoden och bygga skript för att anta ett installations träd baserat på layout LAYOUT. På så sätt kan du separat ange platserna för varje typ av fil i Apache HTTP Server-installationen. Konfigureringsfilen innehåller flera exempelkonfigurationer, och du kan också skapa din egen anpassade konfiguration enligt exemplen. De olika layouterna i den här filen är grupperade till ltLayout FOOgt. ltLayoutgt sektioner och kallas med namn som i FOO. Standardlayouten är Apache. För bättre kontroll över installations kataloger, använd alternativen nedan. Observera att kataloginställningarna ställs in av autoconf och skrivs över av motsvarande layoutinställning. --bind DIR Installera användarprogram i DIR. Användarprogrammen stödjer program som htpasswd. dbmmanage. etc. som är användbara för webbplatsadministratörer. Som standard är DIR inställt på EPREFIX bin. --datadir DIR Installera skrivskyddade arkitekturoberoende data i DIR. Somadir är som standard inställd på PREFIX-aktien. Detta alternativ erbjuds av autoconf och för närvarande oanvänd. - Inkluderar DIR Installera C headerfiler i DIR. Som standard är inkluderir inställt på EPREFIX inklusive. --infodir DIR Installera informationsdokumentation i DIR. Infodir är som standard inställd på PREFIX info. Det här alternativet är för närvarande inte använt. --libdir DIR Installera objektkodsbibliotek i DIR. Som standard är libdir inställd på EPREFIX lib. --libexecdir DIR Installera programkomponenterna (dvs delade moduler) i DIR. Som standard är libexecdir inställd på EPREFIX-moduler. --localstatedir DIR Installera modifierbara enskilda maskindata i DIR. Som standard är localstatedir inställd på PREFIX var. Detta alternativ erbjuds av autoconf och för närvarande oanvänd. --mandir DIR Installera mandokumentationen i DIR. Som standard är mandir inställd på EPREFIX man. - ingår inklusive DIR Installera C headerfiler för icke-gcc i DIR. Som standard är oldincludedir inställd på usrinclude. Detta alternativ erbjuds av autoconf och för närvarande oanvänd. --sbindir DIR Installera systemadministratörerna i DIR. Det är servernsprogram som httpd. apachectl. suexec. etc. som är nödvändiga för att köra Apache HTTP-servern. Sbindir är som standard inställd på EPREFIX sbin. --sharedstatedir DIR Installera modifierbara arkitekturoberoende data i DIR. Som standard är sharedstatedir inställd på PREFIX com. Detta alternativ erbjuds av autoconf och för närvarande oanvänd. --sysconfdir DIR Installera skrivskyddade data för en maskin, som serverns konfigurationsfiler httpd. conf. mime. types. etc. i DIR. Som standard är sysconfdir inställd på PREFIX conf. Dessa alternativ används för att kompilera Apache HTTP-servern för att köras på ett annat system. I normala fall används inte dessa alternativ när du bygger och kör servern på samma system. - BUIL BUILD Definierar systemtypen för systemet där verktygen byggs. Det är standard för resultatet av script config. guess. --host HOST Definierar systemtypen för det system som servern ska köra på. HOST standardinställningar att byggas. - Target TARGET Konfigurera för byggkompilatorer för systemtyp TARGET. Det är standard för HOST. Detta alternativ erbjuds av autoconf och inte nödvändigt för Apache HTTP-servern. Dessa alternativ används för att finjustera funktionerna som HTTP-servern kommer att ha. Vanligtvis kan du använda följande syntax för att aktivera eller inaktivera en funktion: --disable-FEATURE Fyll inte i FEATURE. Detta är detsamma som --bart - FEATURE nr. --enable-FEATURE ARG Inkludera FEATURE. Standardvärdet för ARG är ja. --enbar - MODULE shared Den motsvarande modulen kommer att byggas som DSO-modul. Som standard kopplas moduler dynamiskt. --enbar - MODUL statisk Den motsvarande modulen kopplas statiskt. Konfigurera kommer inte att klaga på - Enbart-Foo även om Foo inte existerar, så du måste skriva noggrant. De flesta modulerna är standardiserade och måste vara inaktiverade explicit eller med hjälp av sökordet få (se --enable-moduler. - enable-mods-shared och - enable-mods-static nedan för ytterligare förklaring) eller --able - modulesnone som ska tas bort som en grupp. Andra moduler är inte sammanställda som standard och måste aktiveras explicit eller genom att använda sökorden som alla eller egentligen ska vara tillgängliga. För att ta reda på vilka moduler som standard är konfigurerade, kör. configure - h eller. configure --help och titta under Extrafunktioner. Antag att du är intresserad av modexempel1 och modexempel2. och du ser detta: Sedan är modexempel1 aktiverat som standard, och du skulle använda --disable-example1 för att inte kompilera det. modexample2 är avaktiverat som standard, och du skulle använda --enable-example2 för att kompilera det. Flerbehandlingsmoduler. eller MPM, implementera serverns grundläggande beteende. En enda MPM måste vara aktiv för att servern ska kunna fungera. Listan med tillgängliga MPM visas på modulens indexsida. MPM kan byggas som DSO för dynamisk laddning eller statiskt kopplad till servern och aktiveras med följande alternativ: Välj standard MPM för din server. Om MPM-enheter är byggda som DSO-moduler (se --enable-mpms-shared), väljer detta direktiv MPM som laddas i standardkonfigurationsfilen. I annat fall väljer detta direktiv den enda tillgängliga MPM som kommer att vara statiskt kopplad till servern. Om det här alternativet utelämnas används standard MPM för operativsystemet. Aktivera en lista med MPM som dynamiska delade moduler. En av dessa moduler måste laddas dynamiskt med LoadModule-direktivet. MPM-LIST är en mellanseparerad lista med MPM-namn som bifogas citattecken. Till exempel: Dessutom kan du använda det speciella sökordet alla. som kommer att välja alla MPM som stöder dynamisk laddning på den nuvarande plattformen och bygger dem som DSO-moduler. Till exempel: För att lägga till ytterligare tredjepartsmoduler, använd följande alternativ: - Modulmodul med modul. modul-fil, modul-typ. modulfil Lägg till en eller flera tredjepartsmoduler i listan över statiskt länkade moduler. Modulens källfilmodulfil kommer att sökas i underrubriken Modulmodul-typ av ditt Apache HTTP-serverkällträd. Om det inte hittas, överväger modulen att modulfilen är en absolut filväg och försöker kopiera källfilen till underrubriken Modultyp. Om underkatalogen inte existerar kommer den att skapas och fyllas med en standard Makefile. in. Det här alternativet är användbart för att lägga till små externa moduler som består av en källfil. För mer komplexa moduler bör du läsa leverantörens dokumentation. Om du vill bygga en DSO-modul i stället för en statiskt länkad användaprox. --enable-maintainer-mode Aktivera felsökning och sammanställa varningar och ladda alla kompilerade moduler. --enable-mods-shared MODULE-LIST Definierar en lista över moduler som ska aktiveras och byggas som dynamiska delade moduler. Det betyder att modulen måste laddas dynamiskt med LoadModule-direktivet. MODULE-LIST är en mellanseparerad lista över modulnamn bifogade av citattecken. Modulnamnen ges utan föregående mod. Till exempel: - Enable-mods-sharedheaders omskrivning dav Dessutom kan du använda de speciella nyckelorden reallyall. Allt. mest och få. Till exempel kommer kompilera de flesta moduler och bygga dem som DSO-moduler, kommer bara att sammanställa en mycket grundläggande uppsättning moduler. Standardinställningen är mest. LoadModule-direktiven för de valda modulerna genereras automatiskt i huvudkonfigurationsfilen. Som standard kommer alla dessa direktiv att kommenteras med undantag för de moduler som antingen krävs eller uttryckligen väljs av ett configure - enable-foo-argument. Du kan ändra uppsättningen laddade moduler genom att aktivera eller inaktivera LoadModule-direktiven i httpd. conf. Dessutom kan LoadModule-direktiven för alla inbyggda moduler aktiveras via configure-alternativet - enbart-alla-moduler. --enable-mods-static MODULE-LIST Den här alternativen beter sig som - enable-mods-shared. men kommer länka de givna modulerna statiskt. Detta innebär att dessa moduler alltid kommer att finnas när du kör httpd. De behöver inte laddas med LoadModule. - moduler-moduler MODULLISTA Den här alternativen beter sig som --enable-mods-shared. och kommer även länka de givna modulerna dynamiskt. Det speciella sökordet ingen inaktiverar byggandet av alla moduler. --enable-v4-mapped Tillåt IPv6-uttag för att hantera IPv4-anslutningar. - med port PORT Det definierar porten som httpd kommer att lyssna på. Detta portnummer används när du genererar konfigurationsfilen httpd. conf. Standardvärdet är 80. - med-programnamn Definiera ett alternativ som kan köras. Standardvärdet är httpd. Dessa alternativ används för att definiera valfria paket. Generellt kan du använda följande syntax för att definiera ett valfritt paket: - med - PACKAGE ARG Använd paketpaketet. Standardvärdet för ARG är ja. - utan - PACKAGE Använd inte paketpaketet. Detta är samma som - med - PACKAGE nr. Detta alternativ tillhandahålls av autoconf men inte särskilt användbart för Apache HTTP-servern. - med-april DIR-FIL Apache Portable Runtime (APR) är en del av httpd-källfördelningen och kommer automatiskt att byggas tillsammans med HTTP-servern. Om du vill använda en redan installerad APR istället måste du berätta för sökvägen till apr-config-skriptet. Du kan ange den absoluta sökvägen och namnet eller katalogen till den installerade APR. apr-config måste finnas i den här katalogen eller underkatalogen. - med-apr-util DIR-fil Apache Portable Runtime Utilities (APU) är en del av httpd-källfördelningen och kommer automatiskt att byggas tillsammans med HTTP-servern. Om du vill använda en redan installerad APU istället måste du berätta för sökvägen till apu-config-skriptet. Du kan ställa in den absoluta sökvägen och namnet eller katalogen till den installerade APU-enheten. apu-config måste finnas i den här katalogen eller underkatalogen. - med-ssl DIR Om modssl har aktiverats konfigurera sökningar efter en installerad OpenSSL. Du kan ställa in katalogvägen till SSLTLS-verktyget istället. - med-z DIR konfigurerar automatiskt sökningar för ett installerat zlib-bibliotek om din källkonfiguration kräver en (t. ex. när moddeflate är aktiverat). Du kan istället ställa in katalogvägen till komprimeringsbiblioteket. Flera funktioner i Apache HTTP-servern, inklusive modauthndbm och modrewrite s DBM RewriteMap, använder enkla keyvalue-databaser för snabb sökning av information. SDBM ingår i APU, så den här databasen är alltid tillgänglig. Om du vill använda andra databastyper använder du följande alternativ för att aktivera dem: - med-gdbm-sökväg Om ingen sökväg anges, kommer konfigurationen att söka efter de inkluderade filerna och biblioteken i en GNU DBM-installation i de vanliga sökvägarna. En explicit sökvägen kommer att få konfigurationen att se i sökvägen lib och sökvägen ingår för relevanta filer. Slutligen kan sökvägen specificera specifika inkluderar och biblioteksvägar som är åtskilda av ett kolon. - med-ndbm-väg Som - med-gdbm. men söker efter en ny DBM-installation. - med-berkeley-db bana Som - med-gdbm. men söker efter en Berkeley DB-installation. DBM-alternativen tillhandahålls av APU och vidarebefordras till sitt konfigurationsskript. De är värdelösa när du använder en redan installerad APU definierad av - med-apr-util. Du kan använda mer än ett DBM-genomförande tillsammans med din HTTP-server. Den tilldelade DBM-typen kommer att konfigureras inom körtidskonfigurationen vid varje tillfälle. - Enbart statisk support. Bygg en statiskt länkad version av supportbinarierna. Det innebär att en fristående körbar kommer att byggas med alla nödvändiga biblioteken integrerade. Annars är support binärerna kopplade dynamiskt som standard. --enable-suexec Använd det här alternativet för att aktivera suexec. vilket gör det möjligt för dig att ställa in och gid för igångsatta processer. Använd inte det här alternativet om du inte förstår alla säkerhetsimplikationer för att köra ett suid binärt på din server. Ytterligare alternativ för att konfigurera suexec beskrivs nedan. Det är möjligt att skapa ett statiskt länkat binärt i ett enda supportprogram genom att använda följande alternativ: --enable-static-ab Bygg en statiskt länkad version av ab. --enable-static-checkgid Bygg en statiskt länkad version av checkgiden. --enable-static-htdbm Bygg en statiskt länkad version av htdbm. --enable-static-htdigest Bygg en statiskt länkad version av htdigest. --enable-static-htpasswd Bygg en statiskt länkad version av htpasswd. --enable-static-logresolve Bygg en statiskt länkad version av logresolve. - Enbart-statisk-rotatelogs Bygg en statiskt länkad version av rotatelogs. Följande alternativ används för att finjustera beteendet hos suexec. Se Konfigurera och installera suEXEC för ytterligare information. - med-suexec-bin Det definierar sökvägen till suexec binär. Standard är --sbindir (se Finjustering av installationsmappar). - med-suexec-caller Detta definierar användaren tillåtet att ringa suexec. Det ska vara detsamma som användaren under vilken httpd körs normalt. - med-suexec-docroot Här definieras katalogträdet som tillåter suexec-åtkomst för körbara filer. Standardvärdet är --datadirhtdocs. - med-suexec-gidmin Definiera detta eftersom den lägsta GID som tillåts vara en målanvändare för suexec. Standardvärdet är 100. - med-suexec-logfil Det här definierar filnamnet för suexec-loggfilen. Som standard heter logfilen suexeclog och ligger i --logfiledir. - med-suexec-safepath Definiera värdet för miljövariabeln PATH som ska ställas in för processer som startas av suexec. Standardvärdet är usrlocalbin: usrbin: bin. - med-suexec-userdir Det här definierar underkatalogen under användarkatalogen som innehåller alla körbara filer för vilka suexec-åtkomst är tillåten. Denna inställning är nödvändig när du vill använda suexec tillsammans med användarspecifika kataloger (som tillhandahålls av moduserdir). Standard är publichtml. - med-suexec-uidmin Definiera detta eftersom den lägsta UID som tillåts vara en målanvändare för suexec. Standardvärdet är 100. - med-suexec-umask Ange umask för processer som startas av suexec. Det är standardinställningarna för din dator. Det finns några användbara miljövariabler för att åsidosätta val som görs genom att konfigurera eller hjälpa till att hitta bibliotek och program med icke-standardiserade namn eller platser. CC Definiera kommandot C compiler som ska användas för sammanställning. CFLAGS Ange C compiler flaggor som du vill använda för sammanställning. CPP Definiera C preprocessor-kommandot som ska användas. CPPFLAGS Sätta CC preprocessor flaggor, t. ex. - Det ingår om du har rubriker i en icke-standardkatalog inkluderad. LDFLAGS Ställ in länkflaggor, t. ex. - L libdir om du har bibliotek i en icke-standard katalog libdir. Obs! Det här är inte en QampA-sektion. Kommentarer som placeras här bör pekas mot förslag om att förbättra dokumentationen eller servern och kan tas bort igen av våra moderatorer om de antingen implementeras eller anses vara invalidoff-topic. Frågor om hur man hanterar Apache HTTP-servern bör riktas till antingen vår IRC-kanal, httpd, på Freenode eller skickas till våra mailinglistor. Upphovsrätt 2017 Apache Software Foundation. Licensierad enligt Apache License, Version 2.0. Jag installerade en applikation t. ex. fdisk. Men det krävde bibliotek för utförande. Jag letar efter utilitytool som hjälper mig att skapa en statisk binär från redan installerade binärer. Så att jag kan använda den någonstans. De enda pålitliga verktygen jag hittat är ErmineLight härifrån. men den här är shareware. Finns det någon öppen källkodsprogram tillgänglig för samma EDIT fdisk är bara ett exempel. Jag jobbar mestadels med LFS, så om jag måste använda något verktyg måste jag följa stegen som så bara att spara tid, jag letar efter en lösning där jag ska göra en statisk binär från debian eller från fedora eller från annan distrbution, prova den på LFS, och om det fungerar bra eller enligt mitt krav kommer jag att gå med källkod för kompilering. frågade 2 maj 11 kl 18:38 Tja. Det här ser ut som en mycket dålig idé. Men det är möjligt. Eftersom fdisk är öppen källkod, ta bara tag i källan och titta på Makefile. Du bör hitta ett alternativ som passerar - statiskt till gcc vid sammanställning. Jag är inte en CC-guru, men så långt jag vet att det är möjligt att skapa en statiskt länkad binär från ett befintligt dynamiskt länkat binärt är det inte möjligt. Om du vill använda den någonstans rekommenderar Id att använda en liten underhållsfördelning som börjar inom några sekunder och låter dig ändra allt. Det gör mig mer upphetsad eftersom du förmodligen vill ändra skivan som kör din LinuxUNIX-installation. Länken fungerar för mig. Sidan har antal typfelmatiska redaktionsfel som du kan förvänta dig av en professionell programmörs arbete mer än du förväntar dig av en professionell webbplats, färre än du förväntar dig av ett phishing-e-postmeddelande. Ungefär samma som ovanstående post, kom och tänka på det. Det verkar misstänkt att den här helt nya användaren skulle ansluta sig till Stack Exchange precis i tid för att skicka en länk till vad som verkar vara en helt ny webbplats. ndash G-Man Aug 27 15 kl 22:58

No comments:

Post a Comment