Je veux compiler avec ICL (Intel C++ Compiler) l'interface C de ma bibliothèque C++, afin que d'autres personnes puissent utiliser cette librairie avec d'autres compilateurs sous Windows (VC8, Cygwin GCC...)
Donc certains de mes fichiers d'en-tête ont la structure suivante
Je compile le fichier .LIB avec ICL, mais je n'arrive pas à le lier avec l'interface C sous VC8 comme je le souhaiterais.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #ifdef __cplusplus // code C++: déclaration de classes, fonctions templates... ... #endif __cplusplus #ifdef __cplusplus extern "C" { #endif // Déclaration des fonctions C de l'interface ... #ifdef __cplusplus } #endif
Dans mon programme utisateur ,j'essaye
1)
Mais alors le compilo de VC8 répond que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 extern "C" { #include "ma_lib.h" }
> ma_lib.h : error C2894: templates cannot be declared to have 'C' linkage
Donc le compilo va malheureusement vérifier le code C++ dans le fichier d'en-tête.
2)
Mais le linker de VC8 répond qu'il ne peut ouvrir des LIB C++ dont ma librairie est dépendante, par example:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #include "ma_lib.h"
> fatal error LNK1104: cannot open file 'libmmt.lib'
(libmmt est la librairie mathématique d'ICL)
Alors que je ne veux utiliser que les fonctions C de ma librairie, et éviter de donner toutes les autres librairies dont elle est dépendante. Que faire?
Si vous avez des precisions sur les mécanismes de décorations et des dépendances des librairies qui me permettraient de comprendre le problème, je suis preneur.
Partager