Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626

    [QTCreator/Linux] Linking statico di una libreria

    Ciao a tutti,
    In un mio progetto sto utilizzanto le librerie Qwt che ho installato su

    /usr/local/qwt-6.0.1/lib/libqwt.so.6

    Non vorrei che l'utilizzatore del programma debba installare le suddette librerie, perciò vorrei che fossero incluse nell'eseguibile.

    Qualcuno sa come si imposta QT Creator per per far ciò?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Mi sorge un dubbio... perché l'hai installata in /usr/local e non ti sei affidato al repository dei pacchetti della tua distribuzione? non c'era? tra l'altro dipenderà dalla versione di qt installate e su macchine diverse verrebbero fuori dei problemi di versione di libreria.

  3. #3
    Nel file .pro inserisci:

    codice:
    unix:!mac {
      LIBS += -Wl,-rpath=\\\$$ORIGIN/libs
    }
    
    INCLUDEPATH += ../../qwt-6.0.1/src
    unix {
        INCLUDEPATH += ../../ffmpeg-0.11.1/
        unix:!mac {
            LIBS += ../../qwt-6.0.1/lib/libqwt.so
            LIBS += ../../qwt-6.0.1/lib/libqwtmathml.so
        }
        unix:mac {
            LIBS += ../../qwt-6.0.1/lib/qwt.framework/qwt
            LIBS += ../../qwt-6.0.1/lib/qwtmathml.framework/qwtmathml
        }
    }
    windows {
        LIBS += ../../qwt-6.0.1/lib/libqwt.a
        LIBS += ../../qwt-6.0.1/lib/libqwtmathml.a
    }
    Aggiusta i percorsi. Quando distribuisci il programma metti le libreriee in una sottocartella libs di dove si trova l'eseguibile (in Linux) mentre nella cartella dell'eseguibile in Windows.

    Ciao ciao.

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Mi sorge un dubbio... perché l'hai installata in /usr/local e non ti sei affidato al repository dei pacchetti della tua distribuzione? non c'era? tra l'altro dipenderà dalla versione di qt installate e su macchine diverse verrebbero fuori dei problemi di versione di libreria.
    Si, sui repo le qwt non ci sono (c'erano le qwt-3d, ma non mi pare fosse ciò che mi serviva)

    Quindi ho dovuto scaricare i sorgenti, compilare ed installare 'ste qwt.
    Sul mio pc funziona tutto, però vorrei che per far girare sto eseguibile non bisogna fare tutto sto giro per le qwt.
    Tra l'altro vorrei proprio evitare problemi di versione delle qwt
    Io ho installato le 6.0.1 su mint, ma se qualcuno usa un altra distro e le prende dai repo
    (se ci sono) magari si ritrova con le 5.x.x


  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Grazie denis76 della risposta
    nel mio .pro ho già questo (che ha messo il creator quando ho aggiunto le lib qwt)

    codice:
    unix:!macx:!symbian: LIBS += -L$$PWD/../../../../usr/local/qwt-6.0.1/lib/ -lqwt
    
    INCLUDEPATH += $$PWD/../../../../usr/local/qwt-6.0.1/include
    DEPENDPATH += $$PWD/../../../../usr/local/qwt-6.0.1/include
    quindi dovrei cambiare -L$$PWD/../../../../usr/local/qwt-6.0.1/lib/ -lqwt
    con -Wl,-rpath=\\\$$ORIGIN/libs

  6. #6
    Esatto ed in quella cartella già puoi mettere tutte le librerie richieste dal programma non già collocate in /usr/...

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Ok, appena posso provo

    Chiaramente, se io faccio questa modifica poi non dovrebbe più funzionare l'eseguibile
    (finchè non metto la cartella libs e relativa libreria)?

    Scusa se approfitto della tua disponibilità, ma sapresti come cambiare target della compilazione?
    Vorrei creare un eseguibile anche per x86_32 (la mia distro è a 64 bit), ma se vado su project e cerco di modificare il tool chain con gcc 32, non me lo fa fare

    Grazie ancora

  8. #8
    Questo non lo so.
    Per crosscompilare uso il sistema vecchio:
    Compilo per Linux sono a 32 bit
    copio tutto su Windows e compilo a 32 bit tanto per Windows è uguale.
    Fatti una macchina virtuale, con Linux crosscompilare è faticoso e poi c'è sempre qualcosa che non va.

    Ciao ciao.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Scusate ma non è corretto quello che sta facendo boots.
    Quella versione di qwt dipenderà da una versione di qt, che invece sono lasciate a linking dinamico.
    Se le librerie sono dipendenti fra di loro o le linki tutte staticamente (comprese le qt) o nessuna.
    Il mix è senza senso.

    P.S. Altrimenti distribuisci l'eseguibile (senza linking statico) con la libqwt.so.6, mettendo nel readme che:
    - se l'utente ha una distribuzione dove c'è la qwt 6.0.1 , che usi quella della distribuzione
    - altrimenti tu per comodità offri una versione delle qwt compilate da te, da copiare nella /usr/local, scrivendo chiaramente da che versione di qt dipendono (senza che uno debba usare ldd)

  10. #10
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    In realta ciò che suggerisce denis76, non è linkare staticamente qwt, ma se ho capito bene quello di far cercare le librerie anche dentro ./libs, dove ci metto la libreria qwt compilata da me.

    Di fatti ldd <eseguibilile> mi da il percorso della directory libs e non /user/local/... per le qwt

    Unica cosa, ho dovuto mettere nel .pro

    codice:
    unix:!macx:!symbian:{
             LIBS += -Wl,-rpath=\\\$$ORIGIN/libs
             LIBS += -L$$PWD/../../../../usr/local/qwt-6.0.1/lib/ -lqwt
    }
    Altrimenti il linker non vedeva le librerie anche se le avevo copiate dentro la cartella dell'output di compilazione.

    Adesso deve vedere se funziona su un pc senza qwt...mi sa che devo farmi una macchina virtuale

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.