2009-05-15 7 views
1

Est-il possible d'utiliser pour utiliser les bibliothèques compilées avec/MT en C++ CLR? Il me jette soit une tonne de LNK2022 "opération de métadonnées a échoué (8013118D)" erreurs (si j'utilise/MD dans le projet CLR) ou "/ MT" et '/ clr: pure' options de ligne de commande sont incompatibles "si je utiliser/MT.Librairies non gérées liées statiquement et CLR C++

Que dois-je changer dans la bibliothèque? La bibliothèque est à moi, mais elle inclut plusieurs bibliothèques statiques tierces.

Répondre

3

LNK2022 sont une douleur à identifier. Cela signifie généralement que l'une des configurations affectant la structure de votre module est différente des autres.

Vérifiez les causes habituelles suivantes:

  • Assurez-vous que tous vos projets utilisent la même bibliothèque d'exécution (/ ou MDd/MD) pour votre configuration actuelle de solution. Si un projet utilise Debug alors que d'autres utilisent Release ou vice-versa, vous obtiendrez des erreurs LNK2022.
  • Assurez-vous que tous vos projets utilisent le même alignement de structure. Portez une attention particulière si un projet utilise le commutateur/Zp. Aussi, assurez-vous de ne pas utiliser #pragma pack (n) conditionnellement.

Vous pouvez utiliser/d1reportSingleClassLayout_your-classe name_ (sans espace) pour obtenir des informations sur la classe problématique mise en page.

Pour plus d'informations, voir: Diagnosing Hidden ODR Violations in Visual C++

+0

Presque garanti pour être/Zp ou pragma pack. – ConsultUtah

1

La seule manière que je trouvais mélanger code natif bibliothèques statiques compilées avec différentes versions d'exécution crt, est d'écrire une DLL qui agit comme un pont entre les bibliothèques. Par exemple:

votre.exe - compilé avec/MD et clr yourbridge.dll - natif, compilé avec/MT et inclut toutes les bibliothèques tierces construites en utilisant/MT.

Questions connexes