Miten viitataan ympäristömuuttujiin projektitiedostossa ?
-
Olen parhaimmillani työstämässä projektia, jossa käytetään crypto-kirjastoa ja qwt:tä. Siirrettävyyden parantamiseksi olen miettinyt, että kirjastotiedostoihin yms. viitattaisiin ympäristömuuttujien kautta, esimerkiksi QWT_ROOT (määritelty .bashrc:ssä) viittaisi QWT-asennuksen juureen ja sen kautta voitaisiin viitata tarvittaviin tiedostoihin.
Ongelmana on, etteivät viittaukset tunnu toimivan. Esimerkiksi eräässä tiedostossa viitataan QWT:n juuressa olevaan qwtconfig.pri tiedostoon, mutta Qt Creator valittaa, ettei sellaista tiedostoa ole. QWT_ROOT on määritelty /usr/local/qwt-6.1.3:ksi (tarkistettu) ja olen yrittänyt viitata tiedostoon eri tavoin:
$$QWT_ROOT/qwtconfig.pri
$$[QWT_ROOT]/qwtconfig.pri
$${QWT_ROOT}/qwtconfig.primutta tulos on aina sama "no such file". Kyseinen tiedosto on määrätyssä paikassa.
Voidaanko Qt:n projektitiedostossa edes viitata suoraan ympäristömuuttujiin vai pitääkö kaikki polut määritellä absoluuttisesti ? Vai olenko merkinnyt ympäristömuuttujan väärin ?
-
Hei,
Ulkoisten kirjastojen käyttöön on Qt:ssa normaali tapa:
http://doc.qt.io/qt-5/third-party-libraries.htmlJa vielä konkreettisempi ohje:
http://doc.qt.io/qtcreator/creator-project-qmake-libraries.htmlJos oikeasti haluaa ympäristömuuttijien kautta mennä, niin:
http://doc.qt.io/qtcreator/creator-build-settings.htmlCreator ajaa kaiken aina omassa tilassaan, eli bash asetukset eivät tule automaattisesti mukaan. Perusajatus on että kaikki mitä tehdään voi olla cross platform.
-
Ilmeisesti QWT_ROOT, PATH ja LD_LIBRARY_PATH ovat erikoistapauksia ? QWT:hän on Qt:n plugin ja polku/kirjastomäärittelyt voivat olla varsin tarpeellisia. Jos qwt on asennettu oikein pitäisi polun kaiketi olla oikein määriteltynä.
Tällä hetkellä buildi menee muuten läpi, mutta Qt Creator valittaa puuttuvasta tiedostosta libcrypto.so.1.1. Kyseinen kirjasto on hakemistossa /usr/local/lib64 ja kyseinen polku on määritelty muuttujassa LD_LIBRARY_PATH (jossa on myös qwt:n kirjastopolku). Jos taas yritän määritellä polun suoraan:
LIBS += /usr/local/lib64/libcrypto.so.1.1
tai
LIBS += -L/usr/local/lib64/libcrypto.so.1.1tulee virhe "cannot find -lqwt"
-
hmmm,
Eli siis tämä qwt kyseessä: http://qwt.sourceforge.net/
Sen kanssa pääsee helpoiten jos sen importtaa omaan projektiinsa kirjastona. Silloin pitäisi polut mennä oikein.Jos haluaa käyttää QWT_ROOT muuttujaa, niin ohje löytyy tuolta keskeltä sivua: http://doc.qt.io/qtcreator/creator-build-settings.html
Sitten voi käyttää sitä raakojen polkujen sijasta.qwt:llä pitää olla oma LIBS += rivi jossain, muuten tosiaan tulee tuo virhe.
LIBS += -L"/usr/local/qwt-6.1.3/lib/" -lqwt En ole varma polusta, mutta jotain tuonne päin. -
@tekojo Löysin ongelman. Alkuperäisessä projektissa qwt oli toteutettu rinnakkaisena repona, joka liitettiin projektiin ja buildattiin sen mukana. Jotenkin tuo erillisen .pri tiedoston includaus sotki käännöksen. Kun kommentoin sen pois ja merkitsin libqwt:n ja libcrypton mukaan niistä ei tullut enää valituksia.
Tällä hetkellä ongelmana ovat icu-kirjastot (libicudata, libicuuc ja libicui18n), joihin Qt:n oma core-kirjasto viittaa. Kyseiset kirjastot läytyvät Qt-asennuksen alta, mutta Qt creator ei löydä niitä. Ilmeisesti pitää määritellä rpath-muuttujat...
-
@tekojo Alun perin ei ollut. Kun lisäsi LD_LIBRARY_PATH:iin kyseisen polun homma toimi. Tosin vaikuttaa siltä, että LD_LIBRARY_PATH ei osaa tulkita ~ lyhennettä kotihakemistolle. Jos määrittelyssä oli ~/Qt/5.9.2/gcc_64/lib ohjelma valitti ettei löydä kirjastoja. Jos kirjoitti suoraan /home/juhani/Qt/5.9.2/gcc_64/lib ei ongelmaa ollut.
LD_LIBRARY_PATH ei tosin ole hyvä ratkaisu asiakastoimituksia varten. Asiakas ei varmastikaan halua ruveta temppuilemaan polkumäärittelyjen kanssa tai ruveta asentelemaan ylimääräisiä ohjelmia. Sitä varten lienee parempi ratkaisu kopioida tärkeät kirjastot asennuspaketin mukaan, jolloin niihin voidaan viitata paikallisesti.
-
@TheRealJ ~ ei tosiaan toimi, en muista millä oletuksella Creator pyörii, mutta käännöksessä ei voi luottaa kotihakemistoon.
Asiakkaalle toimitettaessa kannattaa katsoa eri deploy scriptit.
Esim http://doc.qt.io/qt-5/windows-deployment.html
Vastaavat on macille ja linuxille.Tai sitten tutustua installer frameworkiin http://doc.qt.io/qtinstallerframework/
Sillä voi tehdä mitä vaan, mutta vaatii vähän tekemistä.