Comment lier l'interface C d'une lib en C++?
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:
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:
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)
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.