Probléme au Link (error LNK2001 sous Ms. Visual studio C++ 6.0)

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 5 août 2010 à 09:41
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 5 août 2010 à 12:06
Bonjour,

Je cherche à faire évoluer un ancien projet C en C++ (c'était pas si simple en faite pas mal de truc étais mal foutu dans le projet, mais sa y est je passe la compilation , et de toute façon ce n'est pas le sujet)

Par contre j'ai encore un problème au Link

J'ai pas mal cherché (sur CodeSources entre autre et aucune solution ne semble me convenir )

Petite précision : je doit utilisé un librairie développé en interne et j'utilise Ms. Visual C++ 6.0

J'ai évidement ajouté cette librairie au projet (dans "Projet"/"Settings"/"Link"/"Object/library modules") soit avec le chemin complet ("E:\....\NomLib.lib") soit avec juste le nom de la librairie et ajouter le chemin où la trouver dans "Tools"/"Options"/"Directories" catégorie "Show directories for:" = "Libary files", sa ne change absolument rien

J'ai des erreurs différentes suivant les configurations (je doit me louper sur un truc mais quoi )

J'ai testé avec deux configuration différentes dans "Projet"/"Settings"/"General"/"Microsoft Foundation Classes"

-> Quand je configure mon projet en "Not Using MFC" :
Je reçois n erreurs du genre :
...
Chargini.obj : error LNK2001: unresolved external symbol "void __stdcall trt_int_ent_(short *)" (?trt_int_ent_@@YGXPAF@Z)
...
MonProj/MonProj.exe : fatal error LNK1120: 77 unresolved externals

trt_int_ent étant une fonction de ma librairie faite maison.

-> Quand je configure mon projet en "Use MCF in a Shared DLL"
Je reçois n erreurs du genre :
...
Acc_ini.obj : error LNK2001: unresolved external symbol __imp__fputs
...
MonProj/MonProj.exe : fatal error LNK1120: 157 unresolved externals

Si je comprend bien VS ne trouve pas la fonction fputs (mais aussi strncmp, fgets, strncpy, free, malloc, ...) soit les fonctions standards EN PLUS des fonctions de ma librairie faite maison

-> Pour finir quand je config en "Use MFC in a Static Library" (même si aucune des discutions que j'ai lut me disais de configurer le projet comme sa)
J'ai exactement les même erreur qu'en "Use MCF in a Shared DLL"

J'en conclue donc que la bonne configuration est la 1ére (puisque c'est avec celle ci que je rencontre le moins d'erreur) mais je ne trouve pas d'autre info.

J'ai également testé de faire
#pragma message(lib, "MaLib.lib")


Help me plz

Quelqu'une des discutions que j'ai pu lire concernant ce genre d'erreur :
Modif de la config MCF
Déclaration par #pragma message

PS :
Certaine librairie sont ignorées dans le projet :
libcmt.lib,msvcrt.lib,libc.lib,libcmtd.lib,msvcrtd.lib
J'ai testé de les supprimer (de la configuration, soit de ne plus les ignorer, pas les supprimer de mon disque ) sa ne change rien.

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo

8 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
5 août 2010 à 11:56
Le problème vient du .h de la lib. C'est une lib en C. Et ton programme est C++.

tu as :
extern void __stdcall trt_int_ent_(short *);
C'est bien en C, mais en C++ il faut faire :
extern "C" void __stdcall trt_int_ent_(short *);


Ton .h devrait ressembler à ça :

#ifdef __cplusplus
extern "C" {
#endif

//tes déclaration de fonction en C

#ifdef __cplusplus
}
#endif
3
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
5 août 2010 à 10:07
Salut,

Ah !! la migration, toute une histoire !!!

Je ne me souviens plus si c'était la compil ou le link, mais changer une extension c en cpp peut résoudre des problèmes.

Si ton programme était en C, donc sans MFC c'est clair qu'il faut garder : "Not Using MFC".

Tu as fait quoi pour passer le projet en c++ ? Tu es allé dans les options avancée du compilo pour mettre "Compile as C++ code" ?
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 août 2010 à 10:18
Merci de t'intéresser à mon problème
Oui + passer les fichier c en fichier cpp (si non sa ne marchais pas)


Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 août 2010 à 10:45
Heeeee non même pas je dit une connerie là
J'ai juste passé mes fichiers c en fichier cpp (elle est où cette option je l'es cherché sans la trouvé )
J'ai ajouter une déclaration de classe à mon projet pour vérif que sa compilais bien en C++ et sa semble fonctionné.
La classe que j'ai ajouté :
class MonTestMigration
{
public:
int	toto,
tata,
tutu;
MonTestMigration()
{
toto tata tutu = 0;
}
MonTestMigration(int ValToto,int ValTata,int ValTutu)
{
toto = ValToto;
tata = ValTata;
tutu = ValTutu;
}
~MonTestMigration()
{
}
};

(Elle est pas propre cette classe car les var sont en public mais c'est un bon test je pense )
Et dans le main :
MonTestMigration JeTestUnObj(1,2,3);
printf("JeTestUnObj :\n - toto = %d\n - tata = %d\n - tutu = %d\n",JeTestUnObj.toto,JeTestUnObj.tata,JeTestUnObj.tutu);
JeTestUnObj.toto = 11;
JeTestUnObj.tata = 12;
JeTestUnObj.tutu = 13;
printf("JeTestUnObj :\n - toto = %d\n - tata = %d\n - tutu = %d\n",JeTestUnObj.toto,JeTestUnObj.tata,JeTestUnObj.tutu);


Sa passe à la compilation donc je pense que c'est OK (mais vue que le link merdouille difficile d'en faire plus)

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
5 août 2010 à 10:54
Autre idée dans ce cas !!

Peux-tu recréer un projet vierge avec le Wizard, puis remettre tous tes fichiers (et les directories qui vont bien pour les includes et libs). Peux-tu que les options par défaut vont résoudre le souci !!!
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 août 2010 à 11:07
Je viens de testé de compilé le projet sous VS2008 j'ai tj les même erreurs

Bonne idée de recrée complétement le projet je test sa tout de suite

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 août 2010 à 11:48
Je viens de créer un nouveau projet en intégrant tout les fichiers du projet originale, en récupérant la liste des lib à ignorer, la lib à ajouter, et les clause de compilation.
Toujours les mêmes erreurs au link

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
5 août 2010 à 12:06
OOOUUUIII c'étais sa une semaine que je bataillais sans comprendre pourquoi sa ne fonctionnais pas
VICTOIRE
Tu me sort une sacré épine du pied là (un baobab même )
MERCI BEAUCOUP

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Rejoignez-nous