Errore di Linking

di il
5 risposte

Errore di Linking

Ciao a tutti,
ho creato un nuovo file \"process1.h\" (praticamente copiato dal file process.h del Visual Studio C++) dove sono definite delle nuove funzioni per eseguire processi, ma durante il linking del codice mi appare il seguente errore: \"[Linker Error] Unresolved external '_V_spawnl' referenced from D:\\INSTALLAZIONI\\ELETTRONICA\\[CD] PROGRAMMI PER L'ELETTRONICA\\SOURCECODE\\FILE PPE (C++ BUILDER 6)\\UNIT1.OBJ\".
Non riesco a cavarci le gambe, ho letto tutti gli aiuti possibili, ma non ci ho capito assolutamente nulla.
Spero che ci sia qualcuno che mi sappia aiutare.

N.B.: Non uso il Visual C++, ma il Builder C++ (non so se cambia qualche cosa).

5 Risposte

  • Re: Errore di Linking

    Ciao,

    Scusa tanto, ma che funzione sarebbe \"_V_spawnl\"?? Il linker ti informa semplicemente che non riesce a trovarla e, a quanto mi risulta, non esiste alcuna funzione con quel nome... se l'hai scritta tu, allora non hai aggiunto al progetto il sorgente con il suo codice...

    Ciaociao
  • Re: Errore di Linking

    É una funzione per aprire processi, è la \"_spawnl\" del Visual C++ solo con nome cambiato in \"V_spawnl\".
    In pratica ho preso il file process.h nella cartella include di Visual Studio C++ e, poichè usando il Borland C++ Builder che ha già un file process.h per gestire a modo suo l'avvio dei processi con i stessi nomi per le funzioni, ho cambiato nome sia al file .h che alle funzioni interne in modo che durante la compilazione non vengano compilate due funzioni diverse con lo stesso nome.

    Se non ho capito male mi manca da includere un file ... mi sai dire quale file del Visual Studio C++ devo prendere, ed in caso modificare, per includere nel mio progetto?
  • Re: Errore di Linking

    Ciao,

    No, mi pare tu abbia fatto una certa confusione... l'header che includi non ha niente a vedere con la libreria con cui linki. Saprai che il processo di creazione di un eseguibile prevede due fasi (compilazione e link appunto).

    Durante il link, il linker (appunto) collega i moduli oggetto della compilazione con le appropriate librerie (in cui si trova, ad esempio, il codice della funzione spawnl). Le funzioni di libreria non si possono rinominare... cambiare dei nomi in un .h di sistema non ha alcun senso, il linker dove potrebbe trovare il codice oggetto delle funzioni in questione? Invece che _V_spawnl la potevi chiamare pippo() o paperino(), ma che senso potrebbe avere? Se dai un prototipo per una funzione non compresa nelle librerie di sistema la devi poi implementare in qualche modulo...

    Giustamente il linker ti informa che non è riuscito a trovare alcuna funzione di nome _V_spawnl nelle librerie a sua disposizione, e, a meno che tu non ricrei la .lib con i nomi di funzione modificata (sostanzialmente dovresti ricreare il CRT, un'operazione quantomeno sconsigliabile) il codice della funzione in questione non sarà presente da nessuna parte.

    Ciaociao
  • Re: Errore di Linking

    Ti espongo meglio il problema che mi si è creato, forse puoi darmi meglio una mano.

    Vorrei utilizzare la funzione spawnl con il Borland Builder C++ per eseguire un programma di installazione di un dato programma, ma il problema è che se uso l'opzione P_WAIT il programa di installazione non parte fino a che non chiudo forzatamente il mio programmino in cui utilizzo la funzione spawnl.
    Con il Visual Studio C++ invece non accade e non riesco a capire il perchè.
    Penso che il problema sia nel modo in cui sia scritta la funzione spawnl, è per questo che ho cercato, erroneamente, di importare il modo in cui è scritto la funzione _spawnl in Visual Studio C++.

    Non so se puoi aiutaremi nella risoluzione di questo problema, ma comunque ti ringrazio per avermi schiarito le idee.
  • Re: Errore di Linking

    Ciao,
    ho provato a non cambiare il nome della funzione, ma l'errore mi viene sempre dato. Presumo che non riesce a trovare il file in cui è scritta la funzione _spawnl.
    É possibile prelevarla ed importarla sul Borland Builder C++ in modo da poter linkare la funzione _spawnl?
Devi accedere o registrarti per scrivere nel forum
5 risposte