2010-09-16 6 views
0

Salutations, Je suis confronté à une situation compliquée à propos de l'utilisation d'une bibliothèque statique sous Windows. La bibliothèque statique est construite par une version spécifique de mingw qui est fournie avec Eiffel studio. Comme Eiffel studio utilise mingw pour créer sa sortie en tant que lib statique, je n'ai aucun contrôle sur cette configuration. Si j'essaie d'utiliser cette bibliothèque statique avec Eclipse CDT qui utilise une version plus récente de mingw, je ne peux pas compiler mon projet. C'est parce que je dois fournir des options -l à diverses librairies comme winsock, et cela semble dû à la différence entre les versions de compilateurs générant une bibliothèque statique et mon code, cela ne fonctionne pas.comment puis-je utiliser la construction de la bibliothèque statique par une version différente de mingw?

Si je force Eclipse à utiliser le même répertoire de MINGW fourni avec Eiffel studio, celui qui a compilé la lib statique, alors je peux compiler mon code (il y a cependant d'autres problèmes ici) Je ne veux pas contraindre mon développement C++ juste parce qu'une bibliothèque statique est construite avec une version particulière de mingw.

Alors, comment puis-je utiliser cette bibliothèque statique à partir de ma propre version mingw? C'est windows xp btw ..

Cordialement Seref

Répondre

1

Bien que je n'ai pas beaucoup d'informations ici est ce que je ferais:

  1. Essayez de compiler avec la nouvelle version de mingw et voir si vous pouvez le faire fonctionner. Les erreurs sont très importantes dans ce cas (vous devriez également vérifier les listes manuel/diffusion MinGW/forums pour trouver sur la compatibilité entre les versions MinGW

  2. séparé la bibliothèque du programme et wrap toutes ses fonctionnalités - à éviter les différents drapeaux de compilation incompatibles (vous pouvez créer une bibliothèque différente - même une DLL et appeler vos nouvelles fonctions (wrappers pour certaines fonctions de la bibliothèque)

  3. Décidez quelle partie du projet est obligatoire - la partie avec la bibliothèque ou le reste du code

    1. Si la bibliothèque est obligatoire je compiler le code avec cette version de MinGW
    2. Sinon, je voudrais essayer de trouver un équivalent pour cette bibliothèque ou l'éliminer
    3. l'option

D'autres peuvent être disponibles, mais c'est ce que je ferais (dans cet ordre)

+0

Merci. J'ai fini par compiler avec la nouvelle version de mingw, ce qui m'a sauvé de beaucoup de problèmes. Je suis curieux cependant, serait-il possible d'envelopper une bibliothèque statique dans une DLL, pour surmonter les problèmes de version du compilateur? Je veux dire un dll compilé avec l'ancienne version, enveloppant la bibliothèque statique et ses dépendances? – mahonya

+0

Cela dépend du problème. Habituellement, vous n'avez pas de problèmes pour utiliser une DLL (quel que soit le compilateur utilisé pour la construire) ** si ** vous résolvez les symboles avec LoadLibrary et GetProcAddress; mais si vous liez avec la DLL, des problèmes peuvent survenir (et se produiront généralement) en raison du fait que la liaison est un processus spécifique à chaque développement-suite (peut différer même entre les versions). En enveloppant avec l'ancien compilateur et les fonctions d'exportation - si cela est possible !!! - (à résoudre avec GetProcAddress) vous contournez ces problèmes. Bien sûr, le code doit également être modifié pour utiliser GetProcAddress et d'autres. – INS

Questions connexes