You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Qt-ohjelman ”julkaisu” (deploying) käyttäen dynaamisesti linkitettyjä kirjastoja

Qt:lla tehtyä ohjelmaa on usein tarve käyttää myös tietokoneessa, johon Qt:ta tai sen kirjastoja ei ole asennettu. Ohjelman voi tällöin kopioida muistitikulle tai vaikka lähettää sähköpostilla zipattuna, ja sitä voi käyttää missä tahansa saman käyttöjärjestelmän, jolla ohjelma on käännetty, sisältämässä koneessa.

Qt tekee julkaistavalle ohjelmalle oman kansionsa, johon pitää vielä lisätä dynaamisesti linkitetyt kirjastot. Nämä ovat tiedostoja, joilla on Windowsissa pääte .dll ja Linuxeissa yleensä .so. Tiedostot löytyvät jostain päin Qt:n asennushakemistoa, esim. /QtSdk/Desktop/Qt/4.8.0/gcc/lib. Jos projektissa käytetään Qt:n ulkoisia kirjastoja, esim. Qwt:ta, myös niiden kirjastotiedostot on lisättävä.

Mikäli Qt ei tee ”debug” tai ”release” -kansiota, on vasemmalla olevan valikon ”Project”-välilehdeltä asetettava Shadow build -kohtaan raksi. Tällöin kansio tulee ”Build directory”:ssa määriteltyyn polkuun.

”Build/run target selector”:sta, joka löytyy Qt:ssa vasemmalta alhaalta, kannattaa myös säätää kohteeksi ”release”. Tällöin tarvittavat liitekirjastot ovat huomattavasti pienempiä kooltaan. Debug-version kirjastot tunnistaa siitä, että niiden tiedostonimen perässä on d-kirjain, esimerkiksi QtCored.dll, kun release-version vastaava tiedosto on QtCore.dll.

Windowsissa

Windowsissa julkaisu on melko yksinkertaista, koska ohjelma (.exe) löytää .dll-tiedostot samasta kansiosta. Lisäksi ohjelma sanoo, jos jokin .dll-tiedosto puuttuu.

Lisää siis julkaisun kansioon, eli samaan kansioon, jossa on .exe-tiedosto, kaikki tarvittavat .dll-tiedostot. Näitä ovat käyttöliittymällä varustetussa ohjelmassa aina ainakin QtCore.dll ja QtGui.dll. Usein tarvitaan myös muita kirjastotiedostoja. Myös esimerkiksi kuvat tai muut ohjelman käyttämät resurssitiedostot on luonnollisesti lisättävä.

Huom. liitä aina oikeat versiot .dll-tiedostoista. Jos teet ohjelman Qt 4.8:lla, älä ota tiedostoja vanhemmasta Qt-versiosta. Windowsissa tiedostojen nimi on yleensä sama versiosta riippumatta, joten niistä on helppo erehtyä.

Linuxissa

Linuxissa dynaamisesti linkitetyt kirjastot ovat .so-päätteisiä, jonka lisäksi niiden perässä on usein versionumero. Aina tarvittavat tiedostot Qt 4.8.0:ssa ovat siis libQtCore.so.4.8.0 ja libQtGui.so.4.8.0.

Linuxiin pätevät muuten samat säännöt kuin Windowsiin, mutta ohjelma yleensä etsii kirjastoja jostain päin koneen tiedostojärjestelmää, tyypillisesti /usr/lib -hakemistosta. Ohjelmalle on siis kerrottava missä tiedostot ovat. Yksinkertaisinta on ehkä tehdä skriptitiedosto tekstinkäsittelyohjelmalla, vaikkapa Gedit:llä.

Tee siis ohjelman kansioon tekstitiedosto, ja nimeä se samalla nimellä kuin ohjelmasi, päätteeksi ”.sh”. Esim. jos ohjelmasi on nimeltään ”Peli”, tekstitiedoston nimen on oltava ”Peli.sh”. Kopioi tiedostoon seuraava sisältö:

#!/bin/sh

appname=`basename $0 | sed s,\.sh$,,`

dirname=`dirname $0`

tmp="${dirname#?}"

if [ "${dirname%$tmp}" != "/" ]; then

dirname=$PWD/$dirname

fi

LD_LIBRARY_PATH=$dirname

export LD_LIBRARY_PATH

$dirname/$appname "$@"


Tämän jälkeen ohjelman voi suorittaa ajamalla skriptitiedosto Terminalista: ”./Peli.sh”. Ensin on luonnollisesti mentävä ohjelman hakemistoon.

Voi olla, että ohjelmalle ja skriptille pitää vielä antaa oikeuksia:

sudo chmod 777 Peli

sudo chmod 777 Peli.sh

Jos ohjelma hakee kirjastotiedostoa lyhyemmällä versionumerolla, esim. libQtCore.so.4, tee seuraavasti. Paina kirjastotiedostoa, esim. libQtCore.so.4.8.0 oikealla näppäimellä, valitse ”tee linkki” (create link), nimeä tehty linkki ohjelman haluamalla nimellä, tässä tapauksessa siis ”libQtCore.so.4”.

Saat ohjelmasta pikakuvakkeen tekemällä luomastasi skriptitiedostosta (.sh) linkin em. tavalla ja valitsemalla ”Run in terminal”, kun haluat suorittaa ohjelman.

Lähde:

developer.qt.nokia.com/doc/qt-4.8/deployment.html

  • No labels
You must log in to comment.