12
votes

Compilateur ne suivant pas les liens symboliques dans Visual Studio C ++

J'utilise le projet Visual Studio 2008 C ++ (Visa 32 bit).

J'ai la directive #include suivante dans mon code source. p>

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


7 commentaires

Pour faire une description de votre question un peu plus clairement, vous voudrez peut-être changer «exemple» à «Header.h» ou quelque chose, lorsque vous vous référez plus tard «Exemple», donc au début, c'est un peu difficile à suivre.


@Cam: fait. J'ai essayé de reviler la question pour le rendre plus lisible.


Beaucoup mieux;) ... si vous naviguez vers exemple à partir de votre bureau, fonctionne-t-il correctement? Aussi, utilisez-vous un "lien symbolique" réel ou utilisez-vous une "jonction"? (Cette dernière question peut sembler inutile / évidente, mais je veux juste être sûr)


@Cam: Affichage du lien symbolique via l'explorateur de fichiers fonctionne correctement. Le lien est un lien symbolique (.lnk), je ne savais même pas ce qu'était une jonction jusqu'à ce que je le regardais juste maintenant :).


@Akusete: Je viens de tester et cela semble bien fonctionner pour moi. Comment avez-vous créé le lien symbolique?


@Cam: Au départ, c'était à travers un script Cygwin 'en utilisant LN', mais lorsque j'ai rencontré le problème, la première chose que j'ai faite était de recréer le lien à l'aide de la méthode de «nouvelle raccourci» de fichier. Merci pour la confirmation que les liens devraient fonctionner. Je vais vérifier tout ce que je vous rétrécirai la recherche.


@Akusete: Vérifiez ma réponse ci-dessous - ce que vous créez est en fait pas un lien symbolique, mais plutôt un raccourci. Les liens symboliques n'ont pas l'extension .ink.


3 Réponses :


10
votes

Le lien est un lien symbolique (.lnk)

Êtes-vous sûr que vous ne créez pas de raccourci? Les raccourcis fonctionnent sur un niveau supérieur à des liens symboliques et ne signifient rien aux applications.

Inversement, les liens symboliques (si correctement créés) doivent fonctionner correctement avec une application qui lit / écrit sur des fichiers / des dossiers.

Pour plus de détails, vous voudrez peut-être envisager de lire ceci Article sur les liens symboliques , qui explique comment créer un lien symbolique à l'aide de mklink .

Voici un extrait utile d'un commentaire sur cet article par "Bernard Kerckenaere":

  • Raccourci: sur le niveau du système d'exploitation (aux applications qui souhaitent lire / écrire le lien, c'est juste un fichier sans signification)

  • lien soft (ou lien symbolique): comme un raccourci, mais sur le niveau du système de fichiers (Applications en lisant / écrivant le lien, va réellement lire / écrire le Dossier lié à) ... Cela fonctionnera sur des partitions ou des lecteurs

  • link dur: uniquement pour les fichiers, que se passe-t-il est qu'il y a plusieurs Fichier les entrées qui pointent sur le même Données physiques, lorsque vous supprimez un entrée, l'autre va toujours fonctionner, le Les données ne seront pas allées avant toutes les entrées sont supprimés (si avec un lien doux vous Supprimer le répertoire d'origine, le lien ne fonctionnera plus!) -> Vous ne pouvez évidemment créer que des liens difficiles à un fichier sur la même partition

    Ce que vous voulez créer est un lien symbolique que vous pouvez faire avec le paramètre / d à l'aide de MLINK.


3 commentaires

Ahh ... Je ne fréquente pas beaucoup de fenêtres pour le développement. Je suis surpris "ln -s ', en Cygwin a créé un fichier" .lnk "


Je dépose un projet Linux vers Windows et les liens de fichier d'en-tête générés par le script utilisant "LN -S", qui sur des raccourcis créés par Cygwin au lieu de liens symboliques réels


@Akusete: Ah - c'est ennuyeux. Je ne suis pas incroyablement familier avec * Nix Development ou Cygwin (bien que je travaille sur la fixation de cela!), Mais je ne pense pas que vous puissiez facilement créer un lien symbolique à travers Cygwin. Pouvez-vous simplement remplacer les instances LN -S avec des appels à mklink?



1
votes

.LNK n'est pas un lien symbolique, c'est un fichier de raccourci pour l'explorateur. Pour créer une liaison matérielle, utilisez

fsutil hardlink create link_name file_name


0 commentaires

0
votes

Les versions anciennes de Visual Studio sont un peu finiky lorsqu'il s'agit de liens symboliques. Les liens durs sur les fichiers à l'aide du paramètre \ h ne fonctionnent presque jamais, mais symbolisant des répertoires entiers en utilisant \ d est généralement bien. Ensuite, vous devrez peut-être supprimer et ré-ajouter le dossier de et à votre projet, cependant.


0 commentaires