2010-10-23 4 views
5

J'ai des dépendances externes à charger avec mon programme C++, comme boost ou d'autres bibliothèques. Si ces .DLL de bibliothèques ne sont pas dans $ PATH, une fois que j'ai exécuté mon programme, j'ai un message d'erreur "impossible de charger la DLL". Pour que ces fichiers .DLL puissent être chargés lors de l'exécution de mon programme, je dois ajouter ces chemins au répertoire des bibliothèques. Par exemple:Comment ajouter un chemin de DLL d'exécution dans le projet VIsual C++ Express 2010?

PATH=$PATH;c:\boost\lib 

Cela fonctionne, mais je n'aime pas cette solution stupide, ce qui rend l'environnement global sale. En outre, j'ai beaucoup plus de dépendances à ajouter. La pire chose à faire de cette façon est, une fois que vous avez une version différente des dépendances, c'est très ennuyeux. par exemple. Vous avez un projet A dépend de boost1.3.7, de le développer, vous devez changer le PATH

PATH=$PATH;c:\boost1.3.7\lib 

Et, là, vous devez développer un autre projet B qui dépend de boost1.4.4, oh, grand. ... changer la variable

PATH=$PATH;c:\boost1.4.4\lib 

Comme vous pouvez le voir, ce n'est pas une solution intelligente .... Si vous avez plus d'une bibliothèque pour créer un lien, ce serait un vrai cauchemar. Ce que je veux, c'est modifier la propriété du projet VC++, ajouter ces chemins à la variable PATH uniquement lors de l'exécution/du débogage de mon programme. J'ai essayé d'ajouter le chemin à

VC++ Directories -> Executable Directories 

Mais il semble que ce soit PATH pour la construction, pas pour la course. Alors, comment puis-je ajouter des chemins à mon projet VC++ pour exécuter mon programme correctement?

Répondre

1

Vous ne savez pas pourquoi vous envisagez de l'ajouter à PATH en tant que solution «stupide»? C'est une solution très courante pour les bibliothèques tierces. Que faire si vous voulez redistribuer votre application, ou simplement l'exécuter à partir de la ligne de commande au lieu de l'exécuter sous VS?

si vous insistez pour ne pas modifier le chemin global, vous pouvez aussi essayer:

  • ajouter les DLLs nécessaires au répertoire de l'exécutable (= très salissant et sujette aux erreurs en cas de multiples versions et/ou multiples construire les chemins)
  • ajouter les DLLs à% WINDIR%/system32 (même remarque que ci-dessus)
  • créer un fichier batch qui définit le chemin que vous voulez, puis invoquer VS. Maintenant, VS utilise le PATH que vous venez de définir, tandis que le PATH global reste inchangé.
  • Vous pouvez essayer d'installer des DLL dans les dossiers WinSxS, mais ce n'est pas si simple. (for example)

BTW pour contourner le problème de versioning, utilisez les liens symboliques:

mklink /J c:/boost c:/boost1.3.7 

puis juste ajouter c:/coup de pouce à votre PATH. Si la version change, changez le lien symbolique au lieu de l'environnement

Questions connexes