Friday 11 August 2017

Skapa Statiskt Edin Binära Alternativ


Qt-dokumentation Qt för Windows - Distribution Denna dokumentation beskriver implementeringsprocessen för Windows. Vi hänvisar till plug amp-färgexempel-applikationen genom dokumentet för att visa implementeringsprocessen. Windows Deployment Tool Utvecklingsverktyget Windows är utformat för att automatisera processen att skapa en implementerbar mapp som innehåller Qt-relaterade beroende (bibliotek, import av QML, plugins och översättningar) som krävs för att köra programmet från den mappen. Det skapar en sandlåda för Windows Runtime eller ett installations träd för Windows-skrivbordsapplikationer, som enkelt kan buntas till ett installationspaket. Verktyget finns i QTDIRbinwindeployqt. Det tar en. exe-fil eller en katalog som innehåller en. exe-fil som ett argument och skannar körbarheten för beroenden. Om en katalog överförs med argumentet --qmldir använder windeployqt verktyget qmlimportscanner för att skanna QML-filer i katalogen för QML-importberoende. Identifierade beroenden kopieras sedan till exekveringsmappen. De hårdkodade lokala vägarna i Qt5Core. dll ersätts dessutom med de relativa. För Windows-skrivbordsprogram kopieras de nödvändiga runtime-filerna för kompilatorn som standard till den installerbara mappen (om inte alternativet --no-compiler-runtime är specificerat). När det gäller utgåvan bygger med hjälp av Microsoft Visual C, består dessa av de visuella C-omfördelbara paket som är avsedda för rekursiv installation av programinstallatören på målmaskinen. Annars används de delade biblioteken i kompilatorns körtid. Applikationen kan kräva ytterligare tredjepartsbibliotek (till exempel databasbibliotek), vilka inte beaktas av windeployqt. Ytterligare argument beskrivs i hjälpverktyget för verktyg: Statisk länkning För att skapa statiska applikationer, bygg Qt statiskt genom att konfigurera Qt med - statisk: Om du senare behöver omkonfigurera och bygga om Qt från samma plats, se till att alla spår av den tidigare konfigurationen är avlägsnas genom att ange byggkatalogen och köra nmake distclean eller mingw32-make distclean innan du kör konfigurationen igen. Koppla applikationen till den statiska versionen av Qt Som exempel kommer det här avsnittet att bygga Plug amp Paint-exemplet statiskt. När Qt slutar bygga, bygga Plug Amp Paint-applikationen. Först måste vi gå in i katalogen som innehåller programmet: Kör qmake för att skapa en ny makefile för programmet och utföra en ren byggning för att skapa den statiskt länkade körbara: Du vill förmodligen länka mot släppbiblioteken, och du kan ange detta när man anropar qmake. Nu, förutsatt att allt sammanställt och länkat utan några fel, borde vi ha en plugandpaint. exe-fil som är klar för distribuering. För att kontrollera att programmet har de obligatoriska biblioteken, kopiera den körbara till en maskin som inte har Qt eller någon Qt-applikation installerad och kör den på den maskinen. Kom ihåg att om din ansökan beror på kompilatorspecifika bibliotek måste dessa fortfarande omfördelas tillsammans med din ansökan. Du kan kolla vilka bibliotek som din ansökan kopplar till med hjälp av beredningsverktyget. Mer information finns i avsnittet Programberoende. Eftersom vi inte kan distribuera plugins med hjälp av den statiska länkningsmetoden, är applikationen vi har förberett ofullständig. Det kommer att köras, men funktionaliteten kommer att vara inaktiverad på grund av de saknade pluginsna. För att distribuera pluginbaserade applikationer borde vi använda det gemensamma bibliotekets tillvägagångssätt. Shared Libraries Vi har två utmaningar när du använder Plug Amp Paint-applikationen med hjälp av den gemensamma biblioteksinriktningen: Qt runtime måste distribueras på rätt sätt tillsammans med programmet körbar och plugins måste installeras på rätt plats på målsystemet så att programmet kan hitta dem. Bygg Qt som ett delat bibliotek För detta exempel antar vi att Qt är installerat som ett delat bibliotek, vilket är standard när du installerar Qt, i katalogen C: pathtoQt. Länka applikationen till Qt som ett delat bibliotek Efter att ha säkerställt att Qt är byggt som ett delat bibliotek kan vi bygga Plug amp Paint-applikationen. Först måste vi gå in i katalogen som innehåller programmet: Kör nu qmake för att skapa en ny makefile för applikationen, och gör en ren byggning för att skapa den dynamiskt länkade körbara: Detta bygger kärnprogrammet, följande kommer att bygga plugins: Om allt sammanställs och kopplas utan några fel kommer vi att få en plugandpaint. exe körbar och pnpbasictools. dll och pnpextrafilters. dll plugin-filer. Skapa applikationspaketet För att distribuera programmet måste vi se till att vi kopierar relevanta Qt DLL-filer (motsvarande Qt-modulerna som används i programmet) och Windows-plattformen qwindows. dll. såväl som det körbara till samma katalogtree i utgåva underkatalogen. Till skillnad från användarinställningar måste Qt plugins läggas i underkataloger som matchar plugin-typen. Den rätta platsen för plattformen plugin är en underkatalog som heter plattformar. Qt-pluginsektionen har ytterligare information om plugins och hur Qt söker efter dem. Om ANGLE (standard) används, behöver du dessutom inkludera både libEGL. dll och libGLESv2.dll från Qts lib-katalogen samt HLSL-kompilatorn från DirectX. HLSL-kompilatörsbiblioteket, d3dcompilerXX. dll, där XX är det versionsnummer som ANGLE (libGLESv2) var länkat till. Om Qt konfigurerades för att länka mot ICU eller OpenSSL måste de respektive DLL: erna läggas till i release-mappen. Kom ihåg att om din ansökan beror på kompilatorspecifika bibliotek måste dessa omfördelas tillsammans med din ansökan. Du kan kolla vilka bibliotek som din ansökan kopplar till med hjälp av beredningsverktyget. Mer information finns i avsnittet Programberoende. Tja om pluggarna kort, men kontrollera först att programmet ska fungera i en utplacerad miljö: Kopiera körbar och Qt DLL till en maskin som inte har Qt eller någon Qt-applikation installerad, eller om du vill testa på byggnaden maskin, se till att maskinen inte har Qt i sin miljö. Om programmet startar utan problem har vi framgångsrikt gjort en dynamiskt länkad version av plug-in-program-applikationen. Men programmets funktionalitet kommer fortfarande att saknas, eftersom vi ännu inte har installerat de tillhörande pluginsna. Plugins fungerar annorlunda än normala DLL, så vi kan inte kopiera dem till samma katalog som våra program körbara som vi gjorde med Qt DLLs. När du letar efter plugins söker sökningen i en plugins underkatalog i katalogen av programmet körbar. För att göra plugins tillgängliga för vår ansökan måste vi skapa underkatalogen för plugins och kopiera över relevanta DLL: er: Ett arkiv som distribuerar alla Qt DLLs och programspecifika plugins som krävs för att köra Plug amp Paint-applikationen, måste inkludera följande filer: För att verifiera att programmet nu kan distribueras framgångsrikt kan du extrahera det här arkivet på en maskin utan Qt och utan att någon kompilator har installerats och försök att köra den. Ett alternativ till att lägga plugin i plugin-underkatalogen är att lägga till en anpassad sökväg när du startar din applikation med QCoreApplication :: addLibraryPath () eller QCoreApplication :: setLibraryPaths (). En fördel med att använda plugins är att de enkelt kan göras tillgängliga för en hel serie applikationer. Det är ofta mest bekvämt att lägga till sökvägen i huvudfunktionen (), direkt efter att QApplication-objektet skapats. När sökvägen är tillsatt söker sökningen den efter plugins, förutom att titta i plugins underkatalogen i programmets egen katalog. Eventuellt antal ytterligare banor kan läggas till. Manifesta filer När du installerar en applikation som sammansatt med Visual Studio finns det några ytterligare steg att vidta. Först måste vi kopiera manifestfilen som skapades när länken kopplades till. Den här manifestfilen innehåller information om applikationsberoende på sida vid sida, t. ex. runtime-bibliotek. Manifestfilen måste kopieras till samma mapp som programmet körbar. Du behöver inte kopiera manifestfilerna för delade bibliotek (DLL), eftersom de inte används. Om det delade biblioteket har beroenden som skiljer sig från programmet använder det måste manifestfilen vara inbäddad i DLL-binären. Sedan Qt 4.1.3 finns följande CONFIG-alternativ tillgängliga för inbäddning av manifest: Båda alternativen är aktiverade som standard. För att ta bort embedmanifestexe. lägg till i. pro-filen. Du hittar mer information om manifestfiler och sida vid sida-aggregat på MSDN-webbplatsen. Det rätta sättet att inkludera runtime-biblioteken med din ansökan är att se till att de är installerade på slutanvändarsystemet. För att installera runtime-biblioteken i slutanvändarsystemet måste du inkludera den exekverbara Visual C Redistributable Package (VCRedist) - körningen med din ansökan och se till att den körs när användaren installerar din applikation. De heter vcredistx64.exe (IA64 och 64-bit) eller vcredistx86.exe (32-bit) och kan hittas i mappen c. Alternativt kan de hämtas från webben, till exempel vcredistx64.exe för Visual Studio 2015. Obs! Programmet du skickar måste sammanställas med exakt samma kompilatorversion mot samma C-runtime-version. Detta förhindrar att fel används som orsakas av olika versioner av C-runtime-biblioteken. Tillämpningsberoende Ytterligare bibliotek Till skillnad från konfiguration måste kompilatorspecifika bibliotek omfördelas tillsammans med din ansökan. Till exempel, om Qt är byggt med ANGLE. dess delade bibliotek och HLSL-kompilatorn från DirectX skickas också. Du kan kontrollera vilka bibliotek din ansökan kopplar till med hjälp av verktyget Dependency Walker. Allt du behöver göra är att köra det så här: Detta kommer att ge en lista över de bibliotek som din ansökan beror på och annan information. När du tittar på frigöringsuppbyggnaden av Plug amp Paint-körbar (plugandpaint. exe) med verktyget beror, listar verktyget följande omedelbara beroenden till andra systembibliotek: När du tittar på plugin-DLL-filerna, visas de exakta samma beroenden. Från Qt version 5.2 och framåt är den officiellt stödda versionen för OpenSSL 1.0.0 eller senare. Versioner gt 0.9.7 och lt 1.0.0 kan fungera, men garanteras inte. Qt-plugins Alla Qt-GUI-applikationer kräver ett plugin som implementerar Qt-plattformens abstraktion (QPA) - lagret i Qt 5. För Windows är namnet på plattformens plugin qwindows. dll. Den här filen måste vara placerad i en viss underkatalog (som standard, plattformar) i din distributionskatalog. Alternativt är det möjligt att justera sökvägen Qt använder för att hitta dess plugins, som beskrivs nedan. Din ansökan kan också bero på en eller flera Qt-plugins, till exempel plugin för support för support, JPEG-bildformat eller ett SQL-drivrutins plugin. Var noga med att distribuera alla Qt-plugins som du behöver med din ansökan. På samma sätt som pluginplattformen måste varje typ av plugin placeras i en viss underkatalog (t. ex. skrivarstöd. Bildformat eller sqldrivers) i din distributionskatalog. Sökvägen för Qt-plugins är hårdkodad i QtCore-biblioteket. Som standard är plugin-underkatalogen för Qt-installationen den första plugin-sökvägen. Förutbestämda vägar som standarden har dock vissa nackdelar. Till exempel kan de inte existera på målmaskinen. Därför måste du undersöka olika alternativ för att se till att Qt-pluginsna finns: Använda qt. conf. Detta tillvägagångssätt rekommenderas om du har körbara filer på olika ställen som delar samma plugin. Använda QApplication :: addLibraryPath () eller QApplication :: setLibraryPaths (). Detta tillvägagångssätt rekommenderas om du bara har en körbar som ska använda plugin. Använd ett installationsverktyg för tredje part för att ändra de hårdkodade sökvägarna i QtCore-biblioteket. Om du lägger till en anpassad sökväg med QApplication :: addLibraryPath kan det se ut så här: C: customPathplugins C: QtVERSIONplugins E: myApplicationdirectory Den exekverbara filen letar efter plugins i dessa kataloger och i samma ordning som QStringList returnerad av QCoreApplication :: libraryPaths ( ). Den nyligen tillagda sökvägen är prepended till QCoreApplication :: libraryPaths () vilket innebär att den kommer att söka igenom först. Om du använder QCoreApplication :: setLibraryPaths () kan du dock bestämma vilka sökvägar och i vilken ordning de ska sökas. Hur du skapar Qt Plugins-dokument beskriver de problem du behöver uppmärksamma när du bygger och distribuerar plugins för Qt-applikationer. 2017 Qt Company Ltd. Dokumentationsbidrag som ingår här är upphovsrätten till respektive ägare. Dokumentationen som tillhandahålls här är licensierad enligt villkoren i GNU Free Documentation License version 1.3 som publiceras av Free Software Foundation. Qt och respektive logotyper är varumärken som tillhör Qt Company Ltd. i Finland och andra länder över hela världen. Alla andra varumärken är ägodelar till deras respektive ägare. Användning av 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 arkivet 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 systemspecifikt 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 betyder 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 Det här avsnittet beskriver hur du använder statiska eller delade bibliotek i program. Först måste vi skapa ett huvudprogram. För att länka detta program 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 verkliga 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ändbara länkar 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 det är inte möjligt att skapa en statiskt länkad binär från en befintlig dynamiskt länkad binär. 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äntat dig från 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