Y a-t-il un Windows/MSVC équivalent à l'option-rpath linker?

sous Linux / GCC, je peux utiliser l'option-rpath pour changer le chemin de recherche des exécutables pour les bibliothèques partagées sans avoir recours à des variables d'environnement.

est-ce que cela peut aussi être accompli sur Windows? Autant que je sache, les dll sont toujours recherchés dans le répertoire de l'exécutable et en CHEMIN.

mon scénario: je voudrais mettre des bibliothèques partagées dans des emplacements en fonction de leurs propriétés (32/64bit/Debug/Release) sans m'occuper des noms uniques. Sur Linux, c'est cela se fait facilement via rpath, mais je n'ai pas encore trouvé le moyen de faire cela sur Windows.

Merci pour les conseils!

35
demandé sur Sridhar Ratnakumar 2008-09-20 14:58:54

3 réponses

malheureusement, il n'y a pas d'analogue direct à RPATH. Il y a un certain nombre de possibilités alternatives, chacune d'elles est probablement indésirable pour vous à sa manière particulière.

étant donné que vous avez besoin d'un exe différent pour chaque saveur de construction de toute façon pour éviter les conflits de bibliothèque runtime, comme vous pourriez deviner la chose la plus facile à faire est de mettre chaque exe dans le même dossier que chaque ensemble de DLLs.

comme vous l'avez également mentionné, la méthode la plus universelle est de changer la variable PATH en utilisant un fichier de commandes pour l'amorçage de l'exe.

vous pouvez plutôt changer le répertoire de travail courant avant d'exécuter le programme dans le répertoire DLL désiré.

Vous pouvez utiliser la fonction SetDllDirectory ou AddDllDirectory à l'intérieur de votre exe. C'est probablement le plus proche D'un RPATH, mais ne fonctionne que sur WinXP SP1 ou plus tard.

si vous êtes prêt à modifier le nom du fichier de chaque saveur exe, vous pouvez utiliser la clé de registre "App Paths". Chaque exe aurait besoin d'un nom de fichier unique.

17
répondu kbluck 2012-04-10 14:23:22

l'ordre de recherche pour DLLs dans Windows est décrit sur cette page sur MSDN. Si vous utilisez exécuter en temps la liaison dynamique, vous pouvez spécifier le dossier lorsque vous appelez LoadLibrary.

4
répondu ChrisN 2008-09-20 11:09:18

"applications isolées" est un mécanisme d'intégration D'un manifeste XML qui décrit les dépendances DLL.

3
répondu Adam Mitz 2008-09-20 14:34:35