2009-11-27 5 views
2

Je suis en train de complie mon programme sur Windows via Cygwin avec la commande de compilation:C++ GNU Linker erreurs

g++ ping.cpp -I./include -L./lib -lchartdir50 

J'utilise une API appelée ChartDirector qui dessine des graphiques pour moi. Je n'ai jamais lié les bibliothèques de cette façon auparavant (en général, je le fais via Visual Studio), donc je suis un peu nouveau à ce sujet. J'ai une liste vraiment grand nombre d'erreurs, donc je ne vais pas les énumérer tous, mais je vais énumérer un juste pour préciser le type d'erreurs de l'éditeur de liens que je reçois:

(.text$_ZN9BaseChartD1Ev[BaseChart::~BaseChart()]+0x4f): undefined reference to '_CBaseChart_destroy' 

Tous ces éléments sont référence indéfinie aux erreurs 'xxx'.

J'ai un tas de fichiers d'en-tête dans ./include et une bibliothèque appelée chartdir50.lib dans ./lib

Quel est le problème avec ma ligne de compilation?

Répondre

1

Hmm ... c'est bizarre. J'utilise un système 64 bits, mais pour une raison quelconque, je l'ai essayé avec la bibliothèque 32 bits et il a été compilé. Merci!

+1

Votre système peut être 64 bits, mais je doute que le compilateur est. – Clifford

1

Je ne suis pas sûr, mais .lib ont été compilés avec Visual C++? Si oui, je ne pense pas que ce soit compatible avec GCC, vous devez compiler la bibliothèque avec GCC/G ++ et utiliser ce fichier ou utiliser un binaire compatible si vous n'avez pas accès à la source.

+0

J'ai essayé de le compiler en studio visuel et j'ai eu des erreurs similaires. ping.obj: erreur LNK2019: symbole externe non résolu _CBaseChart_makeChart référencé dans la fonction "public: bool __thiscall BaseChart :: makeChart (char const *)" (? MakeChart @ BaseChart @@ QAE_NPBD @ Z) – Ring

+0

GCC 4.x liera MS bibliothèques d'objets. – Clifford

+0

@Clifford: merci pour l'indication – RageZ

0

Je suppose que lib a été créé avec gcc aussi. AFAIK .lib est une bibliothèque statique, donc vous n'avez pas besoin de le pointer avec le commutateur -l du compilateur.

Il suffit de l'utiliser comme un autre fichier dans la ligne de commande, comme

g ++ ping.cpp -I./include -L./lib {chemin vers lib ici} /chartdir50.lib

HTH.

+0

La liaison du fichier avec -l ou la spécification du chemin complet sont équivalentes, ce qui n'affectera pas la situation. –

+0

J'ai essayé, mêmes erreurs. – Ring

+0

-l liens bibliothèques statiques ou bibliothèque DLL/bibliothèque partagée exporte cela n'a pas d'importance. De plus, GCC 4.x liera les bibliothèques d'objets MS. – Clifford

1

Je ne jamais utiliser cette bibliothèque avant, mais quand je googled, je remarqué que d'autres personnes essayant comme -lchartdir au lieu de -lchartdir50, de sorte que vous devriez essayer.

+0

J'ai essayé d'ajouter la bibliothèque linux "libchartdir.so.5.0.0" à ./lib/ puis de changer ma ligne de commande pour: g ++ ping.cpp -I./include -L./lib/chartdir I eu les mêmes erreurs exactes. – Ring