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
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
Je compile le fichier .LIB avec ICL, mais je n'arrive pas à le lier avec l'interface C sous VC8 comme je le souhaiterais.

Dans mon programme utisateur ,j'essaye
1)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
extern "C" {
#include "ma_lib.h"
}
Mais alors le compilo de VC8 répond que:
> 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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
#include "ma_lib.h"
Mais le linker de VC8 répond qu'il ne peut ouvrir des LIB C++ dont ma librairie est dépendante, par example:
> 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.