2010-01-15 10 views
1

Je veux construire une bibliothèque (poco-1.3.6p2-tout, pour ce que ça vaut) pour x86. Je viens de mettre en place une nouvelle machine Windows 7 64 bits (propre) et j'ai installé Visual Studio 2008 Standard. Rien installé jusqu'à présent sur cette boîte a eu une erreur d'installation.Création de code x86 dans un environnement x64 (Visual Studio 2008)?

La même bibliothèque a été construite sans problème sur un système Windows XP 32 bits avec VS 2008 Standard installé. Oh, oui, tout est C++ non géré.

L'erreur que j'obtiens est à chaque lien des DLL individuelles dans le projet. Exemple:

1>.\obj\debug_shared\CppUnitException1.obj : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86' 

La bibliothèque en question est construit à partir d'un fichier .vcproj appelé à partir d'un script de compilation de fichiers .cmd.

Les options du compilateur (ligne de commande) ressemblent:

/Od /I "include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "CppUnit_EXPORTS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_VC80_UPGRADE=0x0710" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /GF /FD /EHsc /RTC1 /MDd /Fo".\obj\debug_shared/" /Fd".\obj\debug_shared/vc80.pdb" /W3 /nologo /c /ZI /errorReport:prompt 

La ligne de commande de liaison dans les options de projet ressemble à:

/OUT:"..\bin\CppUnitd.dll" /INCREMENTAL /NOLOGO /DLL /MANIFEST /MANIFESTFILE:".\obj\debug_shared\CppUnitd.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"..\bin\CppUnitd.pdb" /DYNAMICBASE /NXCOMPAT /IMPLIB:"..\lib\CppUnitd.lib" /MACHINE:X86 /ERRORREPORT:PROMPT 

Il semble (pour moi) que l'éditeur de liens voit x86 fichiers objet, mais est invoqué en mode x64 même si l'option de ligne de commande est correcte.

J'ai besoin que la cible soit un type 32 bits/x86, pas x64.

Y at-il une option Visual Studio qui va résoudre ce problème?

Répondre

1

Cliquez avec le bouton droit de la souris sur le projet dans VS, accédez aux propriétés. Recherchez l'onglet Générer et assurez-vous que la "cible de la plate-forme" est définie sur "x86".

+0

Où? Je ne vois aucun onglet ni aucune section appelée Build. Dans les propriétés | Linker | Options avancées, Machine cible est définie sur MachineX86. –

+0

Probablement différentes propriétés pour les solutions C++ que C#. Quels autres sont disponibles? –

+0

Pour les options de l'éditeur de liens, c'est la seule option qui semble liée. –

0

Je pense que je devrais mettre cette question au lit. J'ai tripoté avec certaines choses dans la configuration du système (comme la variable path) et les builds suivants se sont déroulés correctement, IE, j'ai fini avec des fichiers OBJ 32 bits qui se liaient correctement aux DLL.

Je ne suis pas certain de ce qui a changé qui a influencé la construction. Donc, une version complète de "clean" fonctionne maintenant, mais je ne sais pas exactement ce que j'ai changé qui l'a fait fonctionner. J'étais fatigué après la reconstruction de mon système (matériel inclus) à partir de zéro et la réinstallation de tout. Il est donc possible que j'aie omis quelque chose d'évident et de stupide (comme l'invocation "vsvars32" avant la construction) et que le fichier make m'accueillait avec des défauts non désirés.

0

Eh bien, je voulais y répondre plus tôt mais je n'ai pas eu l'occasion de le faire. Donc, le problème était avec mon installation de Visual Studio. D'une manière ou d'une autre, l'installation n'a pas installé de compilateur pour x86 et quelques DLL connexes. Une fois que j'ai réinstallé cela a fonctionné. Et aussi le compilateur correct à utiliser serait x86 et pas le compilateur croisé.

0

J'ai une solution mais peut-être que cela ne peut pas résoudre votre problème.

Maintenant, ma façon de résoudre même problème est

(in Visual Studio) Project -> Properties -> C/C++ -> Optimization -> Inline Function Expansion = Default 

Je l'ai fait et mon problème a résolu.