Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. #include classe e path
QtWS25 Last Chance

#include classe e path

Scheduled Pinned Locked Moved Solved Italian
12 Posts 2 Posters 2.1k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by
    #2

    http://doc.qt.io/qt-5/qmake-variable-reference.html#libs

    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
    ~Napoleon Bonaparte

    On a crusade to banish setIndexWidget() from the holy land of Qt

    1 Reply Last reply
    1
    • gfxxG Offline
      gfxxG Offline
      gfxx
      wrote on last edited by
      #3

      non vedo la macro che mi possa aiutare ...

      bkt

      1 Reply Last reply
      0
      • VRoninV Offline
        VRoninV Offline
        VRonin
        wrote on last edited by
        #4

        Allora credo di non aver capito il problema. Stai tentando di linkare librerie da una specifica cartella invece che da /usr/lib. Sbaglio?

        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
        ~Napoleon Bonaparte

        On a crusade to banish setIndexWidget() from the holy land of Qt

        gfxxG 1 Reply Last reply
        0
        • VRoninV VRonin

          Allora credo di non aver capito il problema. Stai tentando di linkare librerie da una specifica cartella invece che da /usr/lib. Sbaglio?

          gfxxG Offline
          gfxxG Offline
          gfxx
          wrote on last edited by gfxx
          #5

          @VRonin si e no ..... si perchè mi serve ... ma questo è già risolto e il mio progetto "vede" gli header e librerie scritti da terzi. ... No perchè dovrei fare in modo che classi scritte da terzi e i cui header sono inclusi nel mio progetto cerchino a loro volta nella cartella /miacartelladihomespeciale/include ... anzichè nella cartella /usr/include come il programma fa, Se e solo se viene installato nella maniera classica.

          Per scopi di test è possibile installarlo in una cartella di home, a patto di lanciare uno scripts in bash, il quale altro non fa che lanciare una serie di comandi ld_path per fare in modo che tutto il programma (classi, header e librerie) cerchino i vari file all'interno della cartella di installazione in home (anzichè nelle path standard previste), ogni qualvolta si accende il pc.

          Ora nel mio progetto qt ho inserito tutta una serie di INCLUDEPATH e LIBS che fanno in modo che io possa utilizzare librerie e gli header correttamente. Ma se gli header fanno riferimento a loro volta ad altri header non inclusi nel mio progetto (come accade) sono fregato. Il mio file pro dovrebbe fare esattamente quello che fa il programma bash per potere compilare correttamente .... altrimenti il compilatore ogni volta mi restituisce degli errori di invalid references ... per forza faccio riferimento e classi che non vengono incluse nel progetto poichè fuori "della sfera di azione" del compilatore qt gcc.

          non sono un campione e faccio fatica ad esprimenrmi correttamente ...
          lo script fa cose queste cose (linuxcnc), reindirizzando tutto il programma nelle cartelle corrette .... ora anche il mio progetto per essere correttamente compilato dovrebbe prima fare questo tipo di reindirizzamento .... INCLUDEPATH non va bene ... ci vorrebbero comandi simili e non saprei come comporli (ammesso si possa):

          case "$0" in
              rip-environment|*/rip-environment)
                  as_command=true
                  if [ $# -eq 0 ]; then
                          cat <<-EOF
          			This script can be used in one of two ways.
          
          			It can be loaded in the context of your shell, by executing
          			    . $0
          			after this, commands like 'linuxcnc', 'halrun' and so on refer to the
          			version in this directory, instead of to an installed version of
          			linuxcnc (if any)
          
          			Second, it can be used to run a command in this directory without
          			modifying the environment of the calling shell:
          			    $0 command...
          			such as
          			    $0 halrun foo.hal
          			    $0 linuxcnc configs/.../foo.ini
          		EOF
          	exit 1
                  fi ;;
              *) as_command=false
          esac
          
          if ! test "xyes" = "xyes"; then
              echo "This script is only useful on run-in-place systems."
              return
          fi
          
          case "$PATH" in
              /home/mypc/linuxcnc-dev/bin:*|*:/home/mypc/linuxcnc-dev/bin:*)
                  if ! $as_command; then
                      echo "This script only needs to be run once per shell session."
                      return
                  fi ;;
          esac
          
          EMC2_HOME=/home/mypc/linuxcnc-dev; export EMC2_HOME
          EMC2VERSION="2.8.0~pre1"; export EMC2VERSION
          LINUXCNCVERSION="2.8.0~pre1"; export LINUXCNCVERSION
          LINUXCNC_NCFILES_DIR="/home/mypc/linuxcnc-dev/nc_files"; export LINUXCNC_NCFILES_DIR
          LINUXCNC_EMCSH=/usr/bin/wish8.6; export LINUXCNC_EMCSH
          PATH=/home/mypc/linuxcnc-dev/bin:$EMC2_HOME/scripts:$EMC2_HOME/tcl:"$PATH"
          
          if [ -z "$TCLLIBPATH" ]; then
              TCLLIBPATH=$EMC2_HOME/tcl
          else
              TCLLIBPATH=$EMC2_HOME/tcl:$TCLLIBPATH
          fi
          
          if [ -z "$LD_LIBRARY_PATH" ]; then
              LD_LIBRARY_PATH=$EMC2_HOME/lib
          else
              LD_LIBRARY_PATH=$EMC2_HOME/lib:"$LD_LIBRARY_PATH"
          fi
          
          if [ -z "$PYTHONPATH" ]; then
              PYTHONPATH=$EMC2_HOME/lib/python
          else
              PYTHONPATH=$EMC2_HOME/lib/python:"$PYTHONPATH"
          fi
          
          if [ -z "$MANPATH" ]; then
              if type -path manpath > /dev/null 2>&1; then
          	MANPATH=$EMC2_HOME/docs/man:"$(manpath)"
              else
          	MANPATH=$EMC2_HOME/docs/man:/usr/local/man:/usr/local/share/man:/usr/share/man
              fi
          else
              MANPATH=$EMC2_HOME/docs/man:"$MANPATH"
          fi
          
          if [ -z "$GLADE_CATALOG_PATH" ]; then
              GLADE_CATALOG_PATH=$EMC2_HOME/lib/python/gladevcp
          else
              GLADE_CATALOG_PATH=$EMC2_HOME/lib/python/gladevcp:"$GLADE_CATALOG_PATH"
          fi
          
          if ! $as_command; then
              # TODO: if these completion directives give trouble for any versions
              # of bash actively in use, protect them with checks of BASH_VERSINFO
              if [ $BASH_VERSINFO -eq 2 ]; then
                  complete -o dirnames -f -X '!*.ini' emc axis mdi
                  complete -o dirnames -f -X '!*.hal' halrun halcmd
                  complete -W 'start stop restart status' realtime
                  complete -C "halcmd -C" halcmd
              else
                  _iningc () {
                      case "$3" in
                      *.ini) COMPREPLY=($(compgen -o plusdirs -f -X '!*.ngc' -- "$2")) ;;
                      *) COMPREPLY=($(compgen -o plusdirs -f -X '!*.ini' -- "$2"))
                      esac
                  }
                  complete -o plusdirs -F _iningc emc axis
                  complete -o plusdirs -f -X '!*.ini' mdi
                  complete -o plusdirs -f -X '!*.hal' halrun halcmd
                  complete -W 'start stop restart status' realtime
                  complete -C "halcmd -C" halcmd
              fi
          
              if [ -f $EMC2_HOME/src/Makefile ]; then
                  build () { make -C $EMC2_HOME/src "$@"; }
              fi
          fi
          
          export PYTHONPATH MANPATH LD_LIBRARY_PATH TCLLIBPATH GLADE_CATALOG_PATH
          
          if $as_command; then exec "$@"; fi
          
          

          bkt

          1 Reply Last reply
          0
          • VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #6

            Ok, separiamo 3 cose:

            • Gli include sono file di testo che contengono le dichiarazioni. Sono usati solo dal compilatore
            • Le librerie sono pezzi di programma pre-compilati che il tuo programma va a usare, gli include servono a dire al tuo programma cosa c'e' all'interno delle librerie. Sono usati solo dal compilatore
            • I binari di librerie dinamiche (.dll) sono pezzi di programma che vengono distribuiti a parte dal programma principale. Sono usate solo quando esegui il programma

            Ora nel mio progetto qt ho inserito tutta una serie di INCLUDEPATH e LIBS

            Come?

            il quale altro non fa che lanciare una serie di comandi ld_path

            Quello script fa molto di piu'

            PATH=/home/mypc/linuxcnc-dev/bin:$EMC2_HOME/scripts:$EMC2_HOME/tcl:"$PATH" per esempio cambia la variabile PATH e questo non e' possibile tramite qmake (files .pro)

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            1 Reply Last reply
            0
            • gfxxG Offline
              gfxxG Offline
              gfxx
              wrote on last edited by
              #7

              @VRonin

              Ora nel mio progetto qt ho inserito tutta una serie di INCLUDEPATH e LIBS

              Come?

              INCLUDEPATH += /home/mypc/linuxcnc-dev/bin
              INCLUDEPATH += /home/mypc/linuxcnc-dev/include
              INCLUDEPATH += /home/mypc/linuxcnc-dev/lib

              LIBS += -L /home/mypc/linuxcnc-dev/lib -lnml -llinuxcnc

              il quale altro non fa che lanciare una serie di comandi ld_path

              Quello script fa molto di piu'
              PATH=/home/mypc/linuxcnc-dev/bin:$EMC2_HOME/scripts:$EMC2_HOME/tcl:"$PATH" per esempio cambia la variabile PATH e questo non e' possibile tramite qmake (files .pro)

              Bhè si è vero che fa molto di più ... ma la sostituzione della variabile $PATH funziona solo negli script python ... non sono riuscito trovare una spiegazione del perchè questo comando invece funzioni:

              g++ myprogram.cc -o test1 -I include -L lib -lnml -llinuxcnc (ovviamente dopo avere lanciato lo script bash)

              allo stato attuale myprogram.cc e la versione qt myprogram.ccp fanno le stesse cose ... addirittura ho provato a mettere il mio progetto nella cartella /home/mypc/linuxcnc-dev/scripts e compilarlo da la dopo avere lanciato lo scripts .... ma qmake se ne infischia ....

              e qui viene il bello .... ogni tanto scrivendo mi vengono dei dubbi perchè sono cose che faccio dei ritagli di tempo ... così ho riprovato il comando
              g++ myprogram.cc -o test1 -I include -L lib -lnml -llinuxcnc (ovviamente dopo avere lanciato lo script bash)

              e questa volta mi da lo stesso errore che ottengo su qt ... controllo il file e manca un include ... inserisco l'include in qt .... e finalmente tutto compila correttamente ....

              bastava infilare il progetto nella cartella a cui puntava lo scripts ... a volte le soluzioni più facili ......

              mi restituisce questo errore però quando lo faccio partire:

              Starting /home/mypc/linuxcnc-dev/scripts/Qtmyprogram...
              /home/mypc/linuxcnc-dev/scripts/Qtmyprogram: error while loading shared libraries: libnml.so.0: cannot open shared object file: No such file or directory
              /home/mypc/linuxcnc-dev/scripts/QtDro exited with code 127
              

              la libreria c'è .... ed è nel posto giusto .... io la chiamo con -lnml ... tu hai qualche idea a riguardo?

              bkt

              1 Reply Last reply
              0
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by
                #8

                i file .so sono quelli che descrivo come

                binari di librerie dinamiche

                devono essere nella stessa cartella dell'eseguibile (o in una cartella inclusa in PATH)

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                1 Reply Last reply
                1
                • gfxxG Offline
                  gfxxG Offline
                  gfxx
                  wrote on last edited by
                  #9

                  @VRonin ok ... quindi se non sono nella cartella del progetto, non sono raggiungibili da LIBS nel file pro ... significa che posso aggiungere nella cartella un link che punta alla libreria ...

                  teoricamente quella libreria dovrebbe essere letta da

                  LIBS += -L /home/mypc/linuxcnc-dev/lib -lnml -llinuxcnc

                  nota che -llnml è la prima e libnml.so.0 è proprio il suo binario ...

                  la cosa strana è che per certo sono in

                  PATH

                  provo ad aggiungere il link nella cartella ... ho il sospetto che se faccio il link a libnml.so.0 nella cartella del progetto (ammesso che funzioni) dovrò farne uno anche per -llinuxcnc .... quindi perchè secondo te qmake non carica le librerie?

                  bkt

                  1 Reply Last reply
                  0
                  • VRoninV Offline
                    VRoninV Offline
                    VRonin
                    wrote on last edited by
                    #10

                    Quello che non mi e' chiaro e' se il tuo problema sia al momento della compilazione o quando lanci il programma

                    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                    ~Napoleon Bonaparte

                    On a crusade to banish setIndexWidget() from the holy land of Qt

                    gfxxG 1 Reply Last reply
                    1
                    • VRoninV VRonin

                      Quello che non mi e' chiaro e' se il tuo problema sia al momento della compilazione o quando lanci il programma

                      gfxxG Offline
                      gfxxG Offline
                      gfxx
                      wrote on last edited by gfxx
                      #11

                      @VRonin Quando lancio il programma ... alla compilazione ora va tutto a meraviglia ...

                      quindi riassumendo:

                      1-alla compilazione tutto ok.

                      2- al lancio del programma -> errore

                      Starting /home/mypc/linuxcnc-dev/scripts/Qtmyprogram...
                      /home/mypc/linuxcnc-dev/scripts/Qtmyprogram: error while loading shared libraries: libnml.so.0: cannot open shared object file: No such file or directory
                      /home/mypc/linuxcnc-dev/scripts/QtDro exited with code 127
                      

                      giorgio

                      bkt

                      1 Reply Last reply
                      0
                      • VRoninV Offline
                        VRoninV Offline
                        VRonin
                        wrote on last edited by
                        #12

                        Allora quello che c'e' nel file pro non c'entra nulla.
                        La soluzione e' spiegata nel paragrafo "List Dependencies" di questo articolo

                        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                        ~Napoleon Bonaparte

                        On a crusade to banish setIndexWidget() from the holy land of Qt

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved