Question

Je voudrais demander plus de détails sur une réponse que j'ai récemment obtenue ici (3ème): Principes de base des langues compilées

Si j'écris en C et MinGW et que je crée un lien vers la bibliothèque C ++ compilée par VC, cela fonctionnera-t-il? Comment savoir à l'avance?

En d'autres termes, si je peux créer sans avertissements un fichier .exe qui renvoie à ce fichier .dll C ++, et que je puisse exécuter (exécuter simplement, aucun autre test) ce fichier .exe, cela signifie-t-il travaillé? Cela ne va-t-il pas faire partie du noyau à un moment donné?

Pour être tout à fait sûr, dois-je recompiler moi-même les sources de la bibliothèque et leur lien?

Je comprends qu’il peut parfois y avoir un problème de lien entre le code C ++ et le code C, mais comment savoir quand cela fonctionne?

PS: Oui, j'ai vu Utiliser les bibliothèques compilées ... Je pensais juste que ma question était légèrement différente.

Était-ce utile?

La solution

  

Si j'écris en C et MinGW et que je crée un lien vers la bibliothèque C ++ compilée par VC, cela fonctionnera-t-il?

Cela dépend des compilateurs (et je ne connais pas MinGW) et de la bibliothèque C ++ spécifique.

Raisons pour lesquelles il est possible que la liaison ne soit pas établie ou qu'elle se bloque si elle le fait:

  1. La bibliothèque C ++ exporte des classes et des méthodes C ++ à l’aide de " mutilé " noms , mais le nom C ++ de MinGW peut être différent (je ne sais pas) du VC (et inexistant lorsque vous codez en C au lieu de C ++)

  2. Le code VC n’utilise pas la même bibliothèque d’exécution C que MinGW, qui vous piquera si l’API est telle que la mémoire est allouée sur le segment de mémoire par le code VC et est ensuite supposée être libérée par le Code MinGW.

  3. Le code de VC n'est pas compatible binaire avec le code de MinGW (n'utilise pas les mêmes conventions de passage de paramètre, n'implémente pas les exceptions de la même manière)

D'un autre côté, cela pourrait fonctionner:

  1. La bibliothèque C ++ est écrite avec une interface de style C, par les développeurs qui souhaitent l’appeler depuis un compilateur différent

  2. Identique à 1.

  3. Les fabricants du compilateur MinGW l'ont rendu compatible binaire avec VC

  

Comment savoir à l'avance?

Je ne sais pas. Si vous publiez les noms des fonctions exportées à partir de la DLL et / ou le fichier d'en-tête qui déclare son API publique / exportée, cela me donnerait (à quelqu'un d'autre) un très bon indice pour savoir s'il s'agit d'exporter (éventuellement incompatible) C ++. méthodes de style ou exportation (plus probable) de fonctions de style C.

Sinon, vous avez une question en deux étapes:

  1. Que faut-il (par exemple, C au lieu de C ++, par exemple, en ne supposant pas qu'ils utilisent le même segment de mémoire, par exemple en spécifiant la convention de passage de paramètre) pour que le code MinGW appelle le code VC?

  2. Votre bibliothèque de VC a-t-elle été écrite dans cet esprit?

Quelqu'un qui a utilisé les deux compilateurs pourrait probablement répondre à la première question (je n'ai pas utilisé MinGW). Je ne sais pas qui pourrait répondre à la seconde; qui a écrit cette bibliothèque de VC?

Autres conseils

Oui, vous pouvez convertir les bibliothèques compilées par MSVC pour MinGW sans recompiler.
Vous n'avez besoin que de quelques outils et de la dll. Découvrez ici .

Concernant le mélange de C et C ++ - si vous n'êtes pas inquiet pour la taille de votre binaire, utilisez simplement le compilateur c ++ pour vos projets c. De cette façon, vous ne vous inquiéterez plus des problèmes possibles avec les bibliothèques auxquelles vous vous connectez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top