-
Tout est-il possible ?
Bonjour
Je suis plutot expert C#...
voici ma question :
Existe t-il des situations ou il est IMPOSSIBLE d'utiliser un fichier .lib en C++/CLI ?
La raison de ma question est que je veux utiliser une librairie particulière d'un partenaire (je n'ai que le .lib et les .h)..
Si je compile le projet du partenaire en natif, tout fonctionne. Si je me "contente" de basculer en mode "CLR" (que ca soit pure, safe, oldsyntax,etc) la compilation échoue (redefine etc...)
Si je fais un "/FORCE:MULTIPLE", j'arrive à linker sauf une ligne que me dit ceci :
Unresolved Lnk 2019 : can't fine ref to ___tmainCTRStartup (dans libcmt.lib)...
quelqu'un aurait-il une idée ?
J'ai bcp cherché sur le web pour en arriver pour le moment à la conclusion que je ne pourrais pas "mettre" ma librairie en C++/CLI...
Quelles options possibles ? des idées ?
Merci d'avance !!!
-
Déjà, passe de /MD plutôt que /MT. Puis réessaie.
-
ok j'essayerais cela
mais il me semble que cela a donné le même résultat :)
Je checke et te dis cela lundi (car l'ordi est au boulot, et là, c'est le week-end :)
-
héhé, j'ai essayé, même topo.
En fait, j'ai une lib avec un exemple qui l'utilise. CE code est du code C++ compilé en non managé.
Il compile très bien.
Si je bascule en compilation managé (CLR, quelque soit l'option), la première chose que j'ai est la suivante :
Bcp de fonctions sont redéfinis à l'édition de lien.
les libs qui me mettent cela sont des libs "'standards", à savoir :
msvcprtd.lib
libcpmtd.lib
libcmt.lib
libcmtd.lib
msvcmrt.lib
Ce que j'ai essayé :
/FORCE:MULTIPLE... ca me vire les problèmes de link, mais au final, je me prends un "unreferenced ... _tMainCRTStartup dans libcmt.lib
J'ai essayé ignoré les librairies en mettant celle qui allaient bien ==> Pas bon
Bref, la question que je me pose est la suivante :
Existe t-il une solution ou bien il est possible que certaines librairies que l'on a en .lib soit INEXPLOITABLES en C++/CLI à moins de pouvoir les recompiler avec certaines options particulières ?
Merci de m'aider en fonction de ce que j'ai pu vous dire :)
Au pire, je peux eventuellement fournir le projet qui me pourrit la vie :)
-
Avec une liste de conflits pareil, c'est un miracle que ça marche en non-managé: Ce code utilise à la fois la version DLL et la version non-DLL de la CRT!
(sans compter les versions debug de chaque).
Essaie de recopiler tout ton code sans /clr, mais avec /MD. Puis pour toutes les libs qui foirent, passe-les en /MD aussi.
Ton projet doit être entièrement en /MD pour pouvoir utiliser la version DLL de la CRT. Quand tout marchera en /MD, réessaie d'activer l'option /clr et ça devrait marcher cette fois.
-
ok merci médinoc
Le seul hic, c'est que les librairies que j'utilise en .lib ne sont pas compilées par mes soins et que donc, je n'ai pas la possibilité de les recompiler.
donc, j'aurais tendance à dire que sans pouvoir moi même compiler ces libs, je suis dans la panade :)
Je vais essayer de voir avec les "fournisseurs" de ces libs si il est possible d'avoir quelque chose de propre :)
Merci beaucoup en tout cas pour ton aide !
-
salut
les fournisseurs des libs m'ont filé une compilation avec /MD et maintenant, tout fonctionne à merveille :)
MErci pour l'aide en tout cas!