8 votes

Où mettre les bibliothèques et les en-têtes sous Windows (en venant d'unix ?)

Lorsqu'un programme unix/linux nécessite des "trucs", je place généralement (ou dpkg place pour moi) les bibliothèques et les en-têtes dans /usr/lib et /usr/include, respectivement.

J'ai récemment téléchargé une bibliothèque que je souhaite utiliser sous Windows, après l'avoir fait récemment sur ma machine linux, qui fournit un téléchargement pour un binaire Windows préconstruit. Bien sûr, cela s'accompagne d'un fichier .dll, .lib et .h qui appartiennent à la bibliothèque.

Ma question est la suivante : existe-t-il un paradigme ou un modèle indiquant où je peux placer ces fichiers afin de pouvoir les utiliser à partir de plusieurs programmes/fichiers sources différents ? Le fichier README fourni avec la bibliothèque n'en fait pas mention, alors pardonnez mon ignorance venant d'unix. De plus, j'utilise la chaîne d'outils en ligne de commande/gcc, pas VC.

3voto

Bacon Bits Points 6455

En général, les seules bibliothèques partagées sont celles de Visual Studio, des .NET Frameworks, de DirectX et de l'API Windows. Les autres bibliothèques sont généralement installées dans le répertoire de chaque application. En général, si une bibliothèque doit être installée pour une utilisation partagée, elle fera l'une des deux choses suivantes :

  1. Installez-le dans son propre emplacement sous Program Files ou Program Files. \Common Les dossiers.
  2. Installer à \Windows\System32 ou (très rarement) \Windows. C'est un retour à la façon dont Windows fonctionnait il y a une dizaine d'années, et c'est considéré comme une mauvaise pratique (sinon par les programmeurs, du moins par les administrateurs).

En fin de compte, cependant, l'endroit où vous les placez dans le système de fichiers importe peu tant que les utilisateurs y ont accès en lecture. Les bibliothèques dynamiques appropriées sont enregistrées (la plupart répondent à regsvr32 <dllname> y regsvr32 /u <dllname> ) afin que les applications qui en ont besoin demandent au registre Windows la bibliothèque qu'elles souhaitent (sur la base du GUID ou du nom de la classe) et que le registre sache où se trouve le fichier. Le registre agit ici comme un catalogue global des bibliothèques installées.

UPDATE :
Pour référence, aquí est la façon dont Windows recherche les bibliothèques que vous spécifiez par leur nom.

Si vous spécifiez la classe dont vous avez besoin, il existe plusieurs façons de le faire. Par exemple, vous pouvez utiliser CoGetClassObject si vous connaissez le CLSID, que vous pouvez obtenir en utilisant quelque chose comme CLSIDFromProgID .

2voto

Pulsehead Points 1654

Ma préférence personnelle est de faire l'une des choses suivantes :

  1. Créez un dossier dans \Program Files\ et les mettre là. Si vous en avez besoin, vous pouvez ajouter le dossier au PATH, mais si vous devez enregistrer le fichier .dll à l'aide de la commande regsvr32 vous n'aurez probablement pas besoin de l'ajouter à PATH.
  2. Faites la même chose que le numéro 1, mais créez-le dans un autre dossier.

Vous pouvez également le placer dans %SYSTEMROOT%, mais je préfère garder les éléments non Windows en dehors de cette zone.

0voto

Windos Points 10851

Si vous les déposez dans le c : \windows\system32 ils devraient être accessibles par n'importe quel programme (mais principalement l'invite cmd).

Vous pouvez également créer votre propre dossier pour les placer n'importe où et ajouter le dossier à la variable "Chemin" de Windows dans les paramètres avancés du système. Cela aura le même effet.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X