Monday 6 November 2017

Lag Statisk Linkedin Binære Alternativer


Qt-dokumentasjon Qt for Windows - distribusjon Denne dokumentasjonen beskriver distribusjonsprosessen for Windows. Vi henviser til plug amp ample maling eksempel søknad gjennom ut dokumentet for å demonstrere distribusjonsprosessen. Windows-distribusjonsverktøyet Windows-distribusjonsverktøyet er utviklet for å automatisere prosessen med å lage en distribusjonsmappe som inneholder Qt-relaterte avhengigheter (biblioteker, QML-import, plugin og oversettelser) som kreves for å kjøre programmet fra den mappen. Den lager en sandkasse for Windows Runtime eller et installasjons-tre for Windows-skrivebordsprogrammer, som enkelt kan legges sammen i en installasjonspakke. Verktøyet finnes i QTDIRbinwindeployqt. Det tar en. exe-fil eller en katalog som inneholder en. exe-fil som et argument, og skanner kjørbarheten for avhengigheter. Hvis en katalog er bestått med --qmldir-argumentet, bruker windeployqt qmlimportscannerverktøyet til å skanne QML-filer inne i katalogen for QML-importavhengigheter. Identifiserte avhengigheter kopieres deretter til kjørbar katalog. De hardkodede lokale banene i Qt5Core. dll erstattes videre med relative. For Windows-skrivebordsprogrammer kopieres de nødvendige runtime-filene til kompilatoren som standard til den distribuerbare mappen som standard (med mindre alternativet - no-compiler-runtime er angitt). I tilfelle av utgivelser bygger Microsoft Visual C, består disse av Visual C Redistributable Packages, som er beregnet for rekursiv installasjon av applikasjonsinstallatøren på målmaskinen. Ellers brukes de delte bibliotekene i kompilatorens kjøretid. Programmet kan kreve ytterligere tredjepartsbiblioteker (for eksempel databasebiblioteker), som ikke er tatt i betraktning av windeployqt. Ytterligere argumenter er beskrevet i verktøyhjelputgangen: Statisk kobling For å bygge statiske applikasjoner, bygg Qt statisk ved å konfigurere Qt med - statisk: Hvis du senere må rekonfigurere og gjenoppbygge Qt fra samme sted, må du sørge for at alle spor av den forrige konfigurasjonen er fjernet ved å skrive inn byggekatalogen og kjøre nmake distclean eller mingw32-gjør distrert før du kjører konfigurere igjen. Koble applikasjonen til den statiske versjonen av Qt Som et eksempel, vil denne delen bygge Plug amp Paint-eksempelet statisk. Når Qt er ferdig med å bygge, bygg Plug amp Paint applikasjonen. Først må vi gå inn i katalogen som inneholder programmet: Kjør qmake for å lage en ny makefile for programmet, og utfør en ren bygg for å opprette den statisk koblede kjørbare: Du vil sannsynligvis koble til utgivelsesbibliotekene, og du kan spesifisere dette når du anvender qmake. Nå, forutsatt at alt samlet og koblet uten feil, bør vi ha en plugandpaint. exe-fil som er klar for distribusjon. For å kontrollere at applikasjonen har de nødvendige bibliotekene, kopier kjørbar til en maskin som ikke har Qt eller noen Qt-programmer installert, og kjør den på den maskinen. Husk at hvis søknaden din er avhengig av kompilatorspesifikke biblioteker, må disse fortsatt distribueres sammen med søknaden din. Du kan sjekke hvilke biblioteker din søknad kobler sammen ved hjelp av verktøyet avhenger. For mer informasjon, les avsnittet Programavhengigheter. Siden vi ikke kan distribuere plugins ved hjelp av den statiske koblingsmetoden, er applikasjonen vi har utarbeidet, ufullstendig. Den vil kjøre, men funksjonaliteten blir deaktivert på grunn av de manglende pluginene. For å distribuere pluginbaserte applikasjoner bør vi bruke den felles bibliotekstilnærmingen. Delte biblioteker Vi har to utfordringer når du bruker Plug amp Paint-applikasjonen ved hjelp av den felles bibliotekstilgangen: Qt-kjøretiden må distribueres riktig sammen med applikasjonen som kan kjøres, og pluginene må installeres på riktig sted på målsystemet slik at søknaden kan finne dem. Bygg Qt som et delt bibliotek For dette eksempelet antar vi at Qt er installert som et delt bibliotek, som er standard når du installerer Qt, i katalogen C: pathtoQt. Koble applikasjonen til Qt som et delt bibliotek Etter å ha sikret at Qt er bygget som et delt bibliotek, kan vi bygge Plug amp Paint applikasjonen. Først må vi gå inn i katalogen som inneholder programmet: Kjør nå qmake for å lage en ny makefile for applikasjonen, og gjør en ren bygg for å opprette dynamisk koblet kjørbar: Dette bygger kjerneprogrammet, følgende vil bygge pluginene: Hvis alt kompilert og koblet uten feil, vil vi få en plugandpaint. exe kjørbar og pnpbasictools. dll og pnpextrafilters. dll plugin-filer. Opprette applikasjonspakken For å distribuere programmet må vi sørge for at vi kopierer de relevante Qt DLL-ene (tilsvarende Qt-modulene som brukes i programmet) og Windows-plattformpluggen qwindows. dll. så vel som kjørbar til samme katalogtreet i utgivelsesunderkatalogen. I motsetning til bruker plugins må Qt plugins settes i underkataloger som samsvarer med plugin-typen. Den riktige plasseringen for plattform-plugin er en underkatalog som heter plattformer. Qt Plugins-seksjonen har tilleggsinformasjon om plugins og hvordan Qt søker etter dem. Hvis ANGLE (standard) brukes, må du i tillegg inkludere både libEGL. dll og libGLESv2.dll fra Qts lib-katalogen, samt HLSL-kompilatoren fra DirectX. HLSL-kompilatorbiblioteket, d3dcompilerXX. dll, der XX er versjonsnummeret som ANGLE (libGLESv2) var koblet til. Hvis Qt ble konfigurert til å koble til ICU eller OpenSSL, må de respektive DLLene også legges til i utgivelsesmappen. Husk at hvis søknaden din avhenger av kompilatorspesifikke biblioteker, må disse omfordeles sammen med søknaden din. Du kan sjekke hvilke biblioteker din søknad kobler sammen ved hjelp av verktøyet avhenger. For mer informasjon, se Avsnittet Programavhengigheter. Vel dekke pluginene i kort tid, men kontroller først at applikasjonen vil fungere i et distribuert miljø: Kopier kopiable og Qt DLLs til en maskin som ikke har Qt eller noen Qt-applikasjoner installert, eller hvis du vil teste på bygningen maskin, sørg for at maskinen ikke har Qt i sitt miljø. Hvis programmet starter uten problemer, har vi vellykket en dynamisk koblet versjon av programmet Plug amp Paint. Men applikasjonsfunksjonaliteten vil fortsatt mangle siden vi ennå ikke har distribuert de tilhørende pluginene. Plugins fungerer annerledes enn normale DLLer, så vi kan ikke bare kopiere dem til samme katalog som våre applikasjoner kjørbare som vi gjorde med Qt DLLs. Når du ser etter programtillegg, søker applikasjonen i en plugin-undermappe i katalogen av programmet kjørbar. For å gjøre pluginene tilgjengelige for vår søknad, må vi opprette plugin-undermappen og kopiere over de aktuelle DLL-ene: Et arkiv som distribuerer alle Qt DLLs og programspesifikke plugins som kreves for å kjøre Plug amp Paint-programmet, må inneholde følgende filer: For å kontrollere at programmet nå kan distribueres, kan du trekke ut dette arkivet på en maskin uten Qt og uten noen kompiler installert, og prøv å kjøre den. Et alternativ til å sette pluginene i plugin-undermappen er å legge til en tilpasset søkebane når du starter programmet ved å bruke QCoreApplication :: addLibraryPath () eller QCoreApplication :: setLibraryPaths (). En fordel ved å bruke plugins er at de enkelt kan gjøres tilgjengelige for en hel rekke applikasjoner. Det er ofte mest praktisk å legge til banen i programmets hovedfunksjon (), rett etter at QApplication-objektet er opprettet. Når banen er lagt til, søker applikasjonen for plugins, i tillegg til å se i plugin-undermappen i programmets egen katalog. Eventuelle antall ekstra baner kan legges til. Manifest filer Når du distribuerer et program kompilert med Visual Studio, er det noen ekstra skritt som skal tas. Først må vi kopiere manifestfilen som er opprettet når du kobler programmet. Denne manifestfilen inneholder informasjon om applikasjonsavhengighetene på side-by-side-enheter, for eksempel runtime-biblioteker. Manifestfilen må kopieres til samme mappe som programmet kjørbar. Du trenger ikke å kopiere manifestfiler for delte biblioteker (DLLer), siden de ikke brukes. Hvis det delte biblioteket har avhengigheter som er forskjellige fra programmet, bruker det, må manifestfilen være innebygd i DLL-binære. Siden Qt 4.1.3 er følgende CONFIG-alternativer tilgjengelig for å legge inn manifester: Begge alternativene er aktivert som standard. For å fjerne embedmanifestexe. legg til i. pro filen din. Du finner mer informasjon om manifestfiler og side ved side-enheter på MSDN-nettstedet. Den riktige måten å inkludere kjøretidsbiblioteker med søknaden din, er å sikre at de er installert på sluttbrukersystemet. For å installere kjøretidsbiblioteker på sluttbrukersystemet må du inkludere den aktuelle Visual C Redistributable Package (VCRedist) kjørbar med søknaden din og sørge for at den kjøres når brukeren installerer programmet. De heter vcredistx64.exe (IA64 og 64-bit) eller vcredistx86.exe (32-bit) og kan finnes i mappen c. Alternativt kan de lastes ned fra nettet, for eksempel vcredistx64.exe for Visual Studio 2015. Merk: Programmet du sender skal kompileres med nøyaktig samme kompilatorversjon mot samme C-kjøretidsversjon. Dette forhindrer distribusjon av feil forårsaket av forskjellige versjoner av C-kjøretidsbiblioteker. Applikasjonsavhengigheter Tilleggsbiblioteker Avhengig av konfigurasjon må kompilatorspesifikke biblioteker omfordeles sammen med søknaden din. For eksempel, hvis Qt er bygget med ANGLE. dets delte biblioteker og HLSL-kompilatoren fra DirectX skal også sendes. Du kan sjekke hvilke biblioteker din søknad er koblet til ved hjelp av Dependency Walker-verktøyet. Alt du trenger å gjøre er å kjøre det slik: Dette vil gi en liste over bibliotekene som søknaden din avhenger av, og annen informasjon. Når du ser på utgivelsesbygget av Plug amp Paint-kjørbar (plugandpaint. exe) med verktøyet avhengig av verktøyet, viser verktøyet følgende umiddelbare avhengigheter til ikke-systembiblioteker: Når du ser på plugin-DLL-er, blir nøyaktig samme avhengigheter oppført. Fra Qt versjon 5.2 og fremover, er den offisielt støttede versjonen for OpenSSL 1.0.0 eller nyere. Versjoner gt 0.9.7 og lt 1.0.0 kan fungere, men garanteres ikke. Qt-plugins Alle Qt-GUI-applikasjoner krever et plugin som implementerer Qt-plattformabstraksjonslaget (QPA) i Qt 5. For Windows er navnet på plattformpluggen qwindows. dll. Denne filen må være plassert i en bestemt underkatalog (som standard, plattformer) under distribusjonsmappen din. Alternativt er det mulig å justere søkebanen Qt bruker for å finne pluginene, som beskrevet nedenfor. Applikasjonen din kan også avhenge av en eller flere Qt-plugins, for eksempel støtte for plugin, JPEG-bildeformatplugin eller en SQL-driverplugin. Sørg for å distribuere eventuelle Qt-plugins som du trenger med din søknad. I likhet med plattformtillegget, må hver type plugin være plassert i en bestemt underkatalog (for eksempel utskriftsstøtte. Bildformater eller sqldrivers) i distribusjonsmappen din. Søkeveien for Qt-plugins er hardkodet i QtCore-biblioteket. Som standard er plugin-underkatalogen av Qt-installasjonen den første plugin-søkebanen. Imidlertid har forhåndsbestemte baner som standard en har visse ulemper. For eksempel kan de ikke eksistere på målmaskinen. Av den grunn må du undersøke ulike alternativer for å sikre at Qt-pluginene er funnet: Bruke qt. conf. Denne tilnærmingen er anbefalt hvis du har kjørbare på forskjellige steder som deler de samme pluginene. Bruke QApplication :: addLibraryPath () eller QApplication :: setLibraryPaths (). Denne tilnærmingen anbefales hvis du bare har en kjørbar som vil bruke plugin. Bruke et tredjeparts installeringsverktøy for å endre de hardkodede banene i QtCore-biblioteket. Hvis du legger til en egendefinert sti ved hjelp av QApplication :: addLibraryPath, kan det se slik ut: C: customPathplugins C: QtVERSIONplugins E: myApplicationdirectory Den kjørbare vil se etter pluginene i disse katalogene og i samme rekkefølge som QStringList returnert av QCoreApplication :: libraryPaths ( ). Den nylig lagt banen er prepended til QCoreApplication :: libraryPaths (), som betyr at den vil bli søkt gjennom først. Men hvis du bruker QCoreApplication :: setLibraryPaths (), vil du kunne bestemme hvilke stier og i hvilken rekkefølge de vil bli søkt. Hvordan lage Qt Plugins-dokumentet beskriver problemene du trenger å være oppmerksom på når du bygger og distribuerer plugins for Qt-applikasjoner. 2017 Qt Company Ltd. Dokumentasjonsbidrag som er inkludert her, er opphavsrett til deres respektive eiere. Dokumentasjonen som er gitt her, er lisensiert i henhold til vilkårene i GNU Free Documentation License versjon 1.3 som publisert av Free Software Foundation. Qt og respektive logoer er varemerker for The Qt Company Ltd. i Finland og andre land over hele verden. Alle andre varemerker tilhører deres respektive eiere. Forslag til dette dokumentet Skriv et bibliotek La oss skrive en enkel kode for AddNumbers-biblioteket som tillater å lagre og legge til to heltall. Den består av både grensesnitt og kildefiler. Opprett et statisk bibliotek Først blir kildefilen srcAddNumbers. cpp omgjort til en objektfil. Et statisk bibliotek er i utgangspunktet et sett med objektfiler som ble kopiert til en enkelt fil. Den er opprettet og påkaller arkiveren. Biblioteknavnet må starte med de tre bokstavene lib og ha suffikset. a. Du kan også skrive lignende regler i en makefile. Se filen Makefile. static gitt i AddNumbers. tar. bz2 arkivet. Opprett et delt bibliotek Den - fpic-alternativet forteller g å opprette posisjon uavhengig kode som er nødvendig for delte biblioteker. Endelig er det felles biblioteket opprettet. Merk bibliotekets navn må starte med de tre bokstavene lib og ha suffikset. so. Som et makefile eksempel se filen Makefile. shared gitt i AddNumbers. tar. bz2 arkivet. C symboler Kommandoer nm og cfilt tillater å liste og demontere C symboler fra objektfiler. La oss prøve disse kommandoene med det statiske biblioteket libAddNumbers. a. Det betyr at biblioteket libAddNumbers. a har blitt bygget med AddNumbers. o objektfilen som inneholder noen symboler. Første kolonne er symbolverdien (den representerer posisjonen til symbolet i biblioteket). Den andre kolonnen er symboltypen. Og den tredje kolonnen er symbolnavnet. Se følgende tabell som beskriver noen vanlige symboltyper. Symbolet er et svakt symbol som ikke er spesifikt merket som et svakt objektsymbol. Når et svakt definert symbol er koblet til et normalt definert symbol, brukes det normale definerte symbolet uten feil. Når et svakt udefinert symbol er koblet og symbolet ikke er definert, er symbolverdien bestemt på en systemspesifikk måte uten feil. Stor bokstav indikerer at en standardverdi er angitt. Symboltypen er ukjent. eller objektfilformat spesifikt. Se nm-håndboken for flere detaljer. Symboler er ikke menneskelige forståelige. Det er med det faktum at C-språket gir overbelastning av funksjon, noe som betyr at du kan skrive mange funksjoner med samme navn (at hver enkelt tar parametere av forskjellige typer). Alle C-funksjonsnavn er kodet inn i et lavnivåmonteringsmerke (denne prosessen kalles mangling). Cfilt-programmet gjør omvendt kartlegging: det dekoder (demanglingprosess) lavnivånavn til brukernavn. Programmet nm tillater direkte å demontere symboler ved hjelp av - C-alternativet. Bruke biblioteker Denne delen beskriver hvordan du bruker statiske eller delte biblioteker i programmer. Først må vi lage et hovedprogram. For å koble dette programmet mot det statiske biblioteket, skriv følgende kommando som kompilerer og lenker hovedkompetansen. Merk at de første tre bokstavene lib samt suffikset. a ikke er angitt for bibliotekets navn. Nå kan programmet AddNumbersClientstatic utføres. For å koble til det delte biblioteket, skriv inn følgende kommando. De tre første bokstavene lib samt suffikset. so er ikke spesifisert for bibliotekets navn. For å kjøre programmet AddNumbersClientshare, må du fortelle LDLIBRARYPATH miljøvariabelen der det ble funnet det delte biblioteket. I den virkelige verden er det bedre å bruke en absolutt sti for LDLIBRARYPATH. Som makefile-eksempler, se Makefile. static og Makefile. shared-filer gitt i AddNumbersClient. tar. bz2-arkivet. Liste over delte biblioteker Kommandoen ldd skriver ut de delte bibliotekene som kreves av hvert program eller delt bibliotek som er spesifisert på kommandolinjen. Nyttige alternativer for GNU ar-programmet oppretter, endrer og trekker ut fra arkiver. Et arkiv er en enkelt fil som inneholder en samling andre filer i en struktur som gjør det mulig å hente de opprinnelige individuelle filene (kalt medlem s i arkivet). De originale filene, modus (tillatelser), tidsstempel, eier og gruppe er bevaret i arkivet, og kan gjenopprettes ved utvinning. Nyttige alternativer for nm Nyttige lenkerJeg installerte et program, f. eks. fdisk. Men det krevde biblioteker for utførelse. Jeg leter etter utilitytool som vil hjelpe meg å lage en statisk binær fra allerede installerte binærfiler. Slik at jeg kan bruke den hvor som helst. De eneste pålitelige verktøyene jeg fant er ErmineLight herfra. men dette er del-ware. Er det noen åpen kildekode programvare tilgjengelig for samme EDIT fdisk er bare et eksempel. Jeg jobber mest på tiden med LFS, så hvis jeg må bruke noe verktøy, må jeg følge trinnene som så bare å spare tid, jeg leter etter en løsning der jeg skal lage en statisk binær fra debian eller fra fedora eller fra andre distrbution, prøv det på LFS, og hvis det fungerer bra eller i henhold til mitt krav, vil jeg gå med kildekoden for kompilering. spurte Mai 2 11 kl 18:38 Vel. Dette ser ut som en veldig dårlig ide. Men det er mulig. Som fdisk er åpen kildekode, bare ta tak i kilden, og se på Makefile. Du bør finne et alternativ som vil passere - statisk til gcc ved kompilering. Jeg er ikke en CC-guru, men så vidt jeg vet, er det ikke mulig å lage en statisk koblet binær fra en eksisterende dynamisk koblet binær. Hvis du vil bruke det hvor som helst, anbefaler Id at du bruker en liten vedlikeholdsfordeling som starter innen sekunder, og lar deg endre alt. Det gir meg større følelse fordi du vil sannsynligvis endre disken som kjører LinuxUNIX-installasjonen din. Koblingen fungerer for meg. Siden har antall typosgrammatiske redaksjonelle feil som du kanskje forventer av en profesjonell programmeres arbeid mer enn du har forventet fra et profesjonelt nettsted, færre enn du forventer fra en phishing-e-post. Omtrent det samme som ovennevnte innlegg, kom til å tenke på det. Det virker mistenkelig at denne splitter nye brukeren vil bli med Stack Exchange akkurat i tide for å legge inn en lenke til det som ser ut til å være et helt nytt nettsted. ndash G-Man Aug 27 15 kl 22:58

No comments:

Post a Comment