9
votes

Compilation de la bibliothèque statique C ++ pour la plate-forme Windows 64 bits à l'aide de VS2008

Ith Visual Studio 2008, si le type de configuration est une bibliothèque statique, je ne vois pas une option de liaison dans les propriétés du projet. J'ai besoin de spécifier / machine: option x64 pour une bibliothèque statique. J'ai essayé de spécifier cela dans l'option de ligne de commande en bibliothécaire. Ce n'est qu'alors que je pourrais construire la bibliothèque statique. Si je ne spécifie pas / la compilation de la machine La libiève Statique échoue avec LNK1112: Le type de machine de module 'x86' est conflit avec le type de machine cible 'x64' (même si je définis la plate-forme sur x64 pour ma solution).

with / machine: x64 spécifié en tant que ligne de commande via Project-Properties-bibliothécaire, la bibliothèque statique a été construite mais autre projet (de type de configuration: DLL) dans la même solution a une dépendance sur la LIB statique, lorsque la DLL est Construit et essaie d'utiliser l'une des fonctions de la LIB I obtenir à nouveau la même erreur:

Erreur fatale LNK1112: Type de machine de module 'x86' conflit avec machine cible Type 'x64'

S'il vous plaît suggérer, comment construire une bibliothèque statique 64 bits


0 commentaires

3 Réponses :


1
votes

Avez-vous essayé d'ajouter une nouvelle configuration de projet (X64) au projet existant?

Vous ne devez généralement pas avoir à éditer les propriétés du projet pour construire dans 64 bits. Il vous suffit d'ajouter les configurations et de vous assurer que la configuration de la solution est correcte (la configuration de la solution 64 bits contient des configurations de projet 64 bits).

Vous pouvez vérifier cela en ouvrant Building-> Configuration Manager . Mon studio Visual est parfois en train de dégage avec ces paramètres et rend le projet inabiletable, alors la vérifie à nouveau pourrait aider.


0 commentaires

8
votes

Pour ce que ça vaut la peine, je suis tombé sur ce même problème.

J'ai un projet qui compile une bibliothèque statique et la création d'une configuration "x64" ne l'a pas réussi à cibler x64. J'ai dû ajouter explicitement "/ machine: x64" comme une "option supplémentaire" sous "Bibliothécaire -> ligne de commande" dans les pages de propriété du projet, comme vous l'avez fait.

J'attendrais que Visual Studio exposerait ce paramètre sous forme de propriété de première classe dans les pages de propriété, comme pour les bibliothèques dynamiques (sous "Linker -> Advanced -> Machine cible"). Peut-être que je manque quelque chose.


0 commentaires

3
votes

Comme mentionné par Timbo, vous devez vous assurer que vous disposez d'une configuration X64 que vous construisez. Cependant, il y a deux autres gotchas à prendre conscience de:

  • Faites un nettoyage total de votre répertoire de construction en premier au cas où vous auriez toujours des fichiers d'objet 32 ​​bits situés autour qui causent la confusion
  • Vérifiez les répertoires intermédiaires et de sortie de votre projet. Si la destination est debug \ myLib.lib alors vous allez rencontrer des problèmes car le même nom est utilisé pour les bibliothèques 32 et 64 bits. Je préfère sélectionner toutes les configurations et toutes les plateformes, puis les renommer tout à quelque chose de standard comme .. \ build \ $ (projetName) \ $ (nom_formesName). $ (Nom de référence>
  • Vérifiez le gestionnaire de configuration selon lequel lorsque vous construisez la configuration 64 bits de la solution à laquelle il est configuré pour créer les configurations 64 bits des projets (cela ne se produit pas toujours par défaut)
  • Erreur: Module Machine Type 'X86' Conflits avec le type de machine cible 'x64' signifie que le fichier d'objet a été construit comme 32 bits mais le réglage de la liaison du projet est défini avec le Flag / machine: x64 . Cela suggère donc que la configuration du projet est 32 bits.
  • En cas de doute sur ce que vous avez créé, choisissez l'un des fichiers d'objet et tapez ceci à une invite de commande:

    DUTPBIN / HEADERS MYFILE.OBJ | FindStr Machine

    Cela vous montrera l'architecture que vous avez réellement construite pour.


2 commentaires

Je ne comprends pas le point 4, que voulez-vous dire "construit comme 32 bits, mais le réglage de la liaison du projet est défini avec le drapeau / la machine: x64". Je ne vois qu'un seul point sur lequel vous pouvez définir / de type machine.


Il est vrai qu'il n'y a qu'un seul point de la configuration où vous pouvez définir le type, mais il peut arriver qu'une configuration de 32 et 64 bits se retrouvent dans le même fichier de sortie, ce qui générera cette erreur. Cela peut également se produire si vous utilisez nmake plutôt que des projets Visual Studio.