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.pri

    mutta 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 ?


  • administrators

    Hei,

    Ulkoisten kirjastojen käyttöön on Qt:ssa normaali tapa:
    http://doc.qt.io/qt-5/third-party-libraries.html

    Ja vielä konkreettisempi ohje:
    http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html

    Jos oikeasti haluaa ympäristömuuttijien kautta mennä, niin:
    http://doc.qt.io/qtcreator/creator-build-settings.html

    Creator 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.1

    tulee virhe "cannot find -lqwt"


  • administrators

    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...


  • administrators

    @TheRealJ
    icu:sta ei ole omaa kokemusta, mutta arvauksena onko

    configure -icu
    

    määritelty projektille?



  • @tekojo Eikö tuo konfiguraatio ole Qt:lle itsessään ? Eli se vaikuttaisi vain Qt:n kääntämisessä. Jos on valmiiksi käännetty Qt Creator ei taida riippuvuudesta päästä noin vain eroon.


  • administrators

    @TheRealJ hupsista, joo. Ajatukset jossain muualla.

    Kyllä nuo kirjastot aina pitäisi olla mukana, ovathan varmasti LD_LIBRARY_PATH polussa?



  • @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.


  • administrators

    @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ä.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.