2010-08-16 10 views
11

Utilizzo il progetto Visual Studio 2008 C++ (Visa 32 bit).Compilatore che non segue i collegamenti simbolici in Visual Studio C++

Ho la seguente #include direttiva nel mio codice sorgente.

#include <example/header.h> 

Nel mio percorso di inclusione a specificare la directory madre di 'esempio', vale a dire

C:/.../include 

in cui il percorso completo l'intestazione sembra

C:/.../include/example/header.h 

Tuttavia, ' esempio 'è un collegamento simbolico (un' .lnk 'creato tramite' nuova scorciatoia 'di file explorer). Ho il seguente errore

c: ... \ foo.cpp (37): Errore irreversibile C1083: Impossibile aprire il file di inclusione: 'esempio/header.h': Nessun file o directory

Se I sostituisce il collegamento simbolico con la directory effettiva, il progetto verrà compilato correttamente. Per motivi pratici ho bisogno che sia un collegamento simbolico. Esiste comunque la possibilità che il pre-processore di Visual Studio segua il collegamento?

+1

Per rendere la tua descrizione della domanda un po 'più chiara, potresti voler cambiare' example.h 'in' header.h 'o qualcosa del genere, dato che successivamente fai riferimento a' example 'quindi all'inizio è un po' difficile da seguire. – Cam

+0

@Cam: fatto. Ho provato a riformulare la domanda per renderla più leggibile. – Akusete

+0

Molto meglio;) ... Se si accede a 'esempio' dal desktop, funziona correttamente? Inoltre, stai usando un "collegamento simbolico" o stai usando un "incrocio"? (L'ultima domanda potrebbe sembrare inutile/ovvia, ma voglio solo esserne sicura) – Cam

risposta

10

il link è un link simbolico (.lnk)

Sei sicuro che non stai creando un collegamento? Le scorciatoie funzionano a un livello superiore rispetto ai collegamenti simbolici e non significano nulla per le applicazioni.

Al contrario, i collegamenti simbolici (se creati correttamente) dovrebbero funzionare correttamente con qualsiasi applicazione che legge/scrive su file/cartelle.

Per ulteriori dettagli, si potrebbe prendere in considerazione la lettura di questo article about symbolic links, che spiega come è possibile creare un collegamento simbolico utilizzando mklink.

Ecco un frammento utile da un commento su questo articolo di "Bernard Kerckenaere":

  • scorciatoia: a livello di sistema operativo (per le applicazioni che desiderano lettura/scrittura sul link, è solo un file senso)

  • soft link (o un link simbolico): come una scorciatoia, ma a livello di filesystem (applicazioni di lettura/scrittura sul link , effettivamente lettura/scrivere il file collegato a) ... questo funzionerà tra le partizioni, o unità

  • hard link: solo per i file, quello che succede è che ci sono più voci di file che puntano agli stessi dati fisici, quando si elimina un ingresso, l'altra volontà funzionano ancora, i dati non saranno scomparsi fino a quando tutte le voci vengono cancellate (se con un collegamento soft si elimina la directory originale , il collegamento non funzionerà più!) -> è ovviamente possibile creare solo collegamenti reali a un file sulla stessa partizione

Quello che si desidera creare è un collegamento simbolico che è possibile eseguire con il parametro /D utilizzando mlink.

+0

Ahh ... Non frequento molto Windows per lo sviluppo. Sono sorpreso 'ln -s', in cygwin ho creato un file '.lnk' – Akusete

+0

Sto facendo il porting di un progetto linux a windows e i link del file header dell'intestazione generati usando 'ln -s', che su cygwin ha creato scorciatoie invece di effettive collegamenti simbolici – Akusete

+0

@Akusete: Ah - è fastidioso. Non ho molta familiarità con * nix development o cygwin (anche se sto lavorando per risolverlo!), Ma non penso che si possa facilmente creare un collegamento simbolico attraverso cygwin. Puoi semplicemente sostituire le istanze di ln -s con le chiamate a mklink? – Cam

1

.lnk non è un collegamento simbolico, è un file di collegamento per Explorer. Per creare hard link, utilizzare

fsutil hardlink create link_name file_name 

Su Vista, c'è mklink utility per creare link simbolici.

0

Le versioni precedenti di Visual Studio sono un po 'pignoli quando si tratta di collegamenti simbolici. Gli hard link su file che usano il parametro \H non funzionano quasi mai, ma il collegamento simbolico di intere directory usando \D di solito funziona bene. In seguito, potrebbe essere necessario rimuovere e riaggiungere la cartella da e al progetto, comunque.

Problemi correlati