Cosa vuol dire questo messaggio

di il
21 risposte

Cosa vuol dire questo messaggio

Buongiorno,
per cortesia mi sapreste dire cosa vuol dire il seguente messaggio e come risolverlo?

"You must select a host application to "run" a library..."

Sto da poco imparando ad usare il C++ e sto cercando di creare una libreria statica.

Grazie

21 Risposte

  • Re: Cosa vuol dire questo messaggio

    Semplicemente che non puoi mandare in esecuzione la libreria da sola.

    Devi scrivere una applicazione che chiama la libreria ed eseguire l'applicazione.
  • Re: Cosa vuol dire questo messaggio

    @Roberto: lascia perdere il C++, a meno che non sia una' necessita'.

    Se indichi a cosa ti serve, ti si puo' consigliare verso un linguaggio ""piu' semplice"".
    Attualmente esiste una SPATAFIATA di linguaggi altrettanto validi e MENO OSTICI del C++.
  • Re: Cosa vuol dire questo messaggio

    @migliorabile: grazie per il consiglio, ma non penso che mi manchi qualcosa a livello intellettivo per poter imparare il C++!!! Lavoro da 16 anni come progettista meccanico, il mio pane quotidiano sono softwares come il CAD/CAM, ecc, e sono quindi programmatore di macchine a CN, e se devo essere sincero il linguaggio C++ lo uso dal 2013 che mi serve per creare delle macro per le mie macchine a CN, le mie conoscenze di questo linguaggio si fermano alle basi per cui mi servono, solo ora ho scoperto che mi sarebbe utile proseguire con lo studio ed approfondire. Utilizzo il C++ come linguaggio, perchè mi è utile il debug (le macchine a CN non ce l'hanno e nemmeno i loro "IDE") per costruire degli algoritmi che mi creano delle forme geometriche a 2D.

    Il problema con l'utilizzo delle librerie statiche ce l'ho solo con code blocks, mentre su Dev C++ c'ho messo pochi secondi ad usarle... In code blocks non riesco a configurarle, ho anche seguito passo passo su un sito in inglese come fare, ma nulla. Ho fatto un copia/incolla del codice che ho usato per la libreria statica su dev C++, per riuscire a compilare la libreria in code blocks, ho dovuto cancellare gli include delle librerie che utilizza la stessa, per esempio non mi permette di includere la libreria cmath, per usare il pi_greco! Il Dev C++ è meno impiccioso!
  • Re: Cosa vuol dire questo messaggio

    Con DevC++ (che è uno dei peggiori IDE) avrai configurato correttamente il progetto di test e le librerie, cosa che non hai fatto con CodeBlocks (nettamente migliore). Qui mi fermo dato che non si sa molto altro.
  • Re: Cosa vuol dire questo messaggio

    Grazie Oregon , dò altre informazioni a riguardo. Tipo io voglio creare in code blocks una libreria con questo codice :
    #include <cstdlib>
    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #define _USE_MATH_DEFINES
    #include <cmath>
    #include "GeometriaAnalitica.h"

    using namespace std;

    //Costanti
    //const double M_PI = 3.1415926535897932384626433832795028841971694;

    //########################################################################################################################################################################
    /********TRIGONOMETRIA********/
    //Trasforma i gradi in radianti
    extern double radianti(double gradi){
    return gradi * (M_PI / 180.0);
    }
    //Trasforma i radianti in gradi
    extern double gradi(double radianti){
    return radianti * (180.0 / M_PI);
    }
    /*Restituisce in gradi compresi tra 0° e +/-360°, i valori superiori a 360° o inferiori a -360°.
    Equivalente al pgm della Star O6016*/
    extern double stabilizzaAngolo(double gradiAngolo){
    //Variabili locali
    double segno = 1.0;
    if(gradiAngolo < 0)
    segno = -segno;
    gradiAngolo = radianti(fabs(gradiAngolo));//Trasforma i gradi in radianti
    gradiAngolo = cos(gradiAngolo);//Coseno dell'angolo
    gradiAngolo = acos(gradiAngolo);//Arcocoseno dell'angolo
    return (gradi(gradiAngolo) * segno);//Restituisce i gradi compresi tra 0° e 360°
    }
    Con questo codice il Dev C++ mi compila la libreria senza problemi utilizzando anche le librerie incluse, mentre code blocks mi dice di cancellare tutti gli include, tranne l'header della stessa, perchè?
    Da premettere che sto cercando di usare la libreria fuori dalla cartella del pgm main della console application, ed il suo file header ce l'ho nella stessa cartella della libreria compilata.
    Poi nel pgm main vado in Settings, scelgo la voce Compiler, qui in Linker settings metto il percorso del file della libreria con estensione .a, poi in Search directories metto il percorso del file header. Infine includo tutto il percorso dell'header della libreria nel pgm main. Quando compilo mi dà il seguente errore "undefined reference to 'radianti(double)' ".
  • Re: Cosa vuol dire questo messaggio

    Extern [prototipo funzione]; nello header
    [prototipo funzione]{ [codice funzione] } nel file sorgente

    Dev-C++ è da rottamare
  • Re: Cosa vuol dire questo messaggio

    Ah quindi in code blocks i prototipi delle funzioni oltre al file header vanno anche all'inizio del sorgente delle librerie?
    Poi per il resto il procedimento che ho descritto qui sopra è giusto?
    Perché nel sorgente delle librerie non mi fa includere le altre librerie che mi servono?
  • Re: Cosa vuol dire questo messaggio

    8non fare confusione. Codeblocka e Dev sono IDE e non c'entrano con la sintassi del codice che è gestita dal compilatore c/c++ installato.

    Quello che ti è stato detto vale per tutti i compilatori.

    Io non ho ancora capito molto di quello che ti succede anche perché hai detto cose diverse rispetto a quanto scritto nel primo post ...

    Per capirci, posta un link da cui scaricare i due progetti (quello scritto con Dev e quello con CodeBlocks) in modo che ci si possa rendere conto personalmente.
  • Re: Cosa vuol dire questo messaggio

    Solitamente si fa:

    Schema 1:
    .cpp
    prototipo
    prototipo { codice }
    .h
    extern prototipo

    oppure Schema 2:
    .cpp
    #include .h
    prototipo { codice }
    .h
    # header guard
    prototipo
    #fine header guard

    Comunque Dev-C++ non è un compilatore, come dice Oregon, ma conoscendolo indirizzerà il compilatore alla carlona
  • Re: Cosa vuol dire questo messaggio

    Allora questo è il codice che vorrei fare come libreria statica:
    
    #include <cstdlib>
    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #define _USE_MATH_DEFINES
    #include <cmath>
    #include "GeometriaAnalitica.h"
    
    using namespace std;
    
        //Costanti
    //const double PI_GRECO = 3.1415926535897932384626433832795028841971694;
    
    //########################################################################################################################################################################
    				/********TRIGONOMETRIA********/
    //Trasforma i gradi in radianti
    extern double radianti(double gradi){
    	return gradi * (M_PI / 180.0);
    }
    //Trasforma i radianti in gradi
    extern double gradi(double radianti){
    	return radianti * (180.0 / M_PI);
    }
    /*Restituisce in gradi compresi tra 0° e +/-360°, i valori superiori a 360° o inferiori a -360°.
    Equivalente al pgm della Star O6016*/
    extern double stabilizzaAngolo(double gradiAngolo){
        //Variabili locali
        double segno = 1.0;
        if(gradiAngolo < 0)
            segno = -segno;
        gradiAngolo = radianti(fabs(gradiAngolo));//Trasforma i gradi in radianti
        gradiAngolo = cos(gradiAngolo);//Coseno dell'angolo
        gradiAngolo = acos(gradiAngolo);//Arcocoseno dell'angolo
        return (gradi(gradiAngolo) * segno);//Restituisce i gradi compresi tra 0° e 360°
    }
    
    In code blocks quando provo a compilare questa libreria mi dà gli errori sugli include, tranne che sul header... Perchè?
    E questo è l'header:
    #ifndef GeometriaAnalitica_H_INCLUDED
    #define GeometriaAnalitica_H_INCLUDED
    
            //Costanti
    //const double PI_GRECO = 3.1415926535897932384626433832795028841971694;
    
            //Trigonometria
    extern double radianti(double gradi);
    extern double gradi(double radianti);
    extern double stabilizzaAngolo(double gradiAngolo);
    
    #endif // GeometriaAnalitica_H_INCLUDED
    
    E questo è il codice del pgm main .cpp:
    #include <cstdlib>
    #include <cstdio>
    #include <iostream>
    #include <cstring>
    #define _USE_MATH_DEFINES
    #include <cmath>
    #include "C:\Users\ASUS\Desktop\R-CAM\Lib\Prova\GeometriaAnalitica.h"
    
    using namespace std;
    
    int main()
    {
        double angolo = 52;
    
        angolo = radianti(angolo);
        
        cout << angolo << endl;
    
        return 0;
    }
    
    Prima di compilare il pgm main.cpp faccio queste procedure:
    -vado in Settings;
    -scelgo la voce Compiler;
    -qui in Linker settings metto il percorso del file della libreria con estensione .a;
    -in Search directories metto il percorso del file header;
    -infine includo tutto il percorso dell'header della libreria nel pgm main.
    Quando compilo però mi dà il seguente errore: "undefined reference to 'radianti(double)' ".
  • Re: Cosa vuol dire questo messaggio

    "Mi dà errori ..." ... perché non riporti esattamente gli errori?

    Quale versione di CB hai installato?
    Quale tipo di progetto hai creato?
  • Re: Cosa vuol dire questo messaggio

    Quando provo a compilare la libreria statica mi dà questo errore:
    cstdlib: No such file or directory.
    Cioè non riesce a trovare i files o le directories delle librerie, ma code blocks, non va a prendere i riferimenti delle librerie standard di default?

    La versione di code blocks è 16.01.
    Il tipo di progetto che ho creato è console application per il programma principale e per la libreria statica ho usato per compilare static library.
  • Re: Cosa vuol dire questo messaggio

    Ma tu hai creato un file .c o un file .cpp ?
  • Re: Cosa vuol dire questo messaggio

    In ordine ho fatto:
    -scegliendo in code blocks "Static Library", ho creato un file .a compilando il sorgente;
    -ho creato un file .h con notepad, e c'ho messo i prototipi delle funzioni;
    -ho creato poi un console application, dove ho impostato il linker con il file .a, il percorso dell'header l'ho incluso nel codice e in settings directories ho messo il percorso dello stesso. L'unico file con estensione .cpp è il pgm main.
Devi accedere o registrarti per scrivere nel forum
21 risposte