Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

impossible de lier du code C++

3 réponses
Avatar
matlerouge
Bonjour

J'ai un probleme :

enc.C contient un programe tout simple en c++, en gros il y a un
#include <iostream> et plus loin un

std::cout << i << std::endl;

le pb c'est que ca compile (avec un gcc -o toto enc.C, mais ensuite :

(....)
/tmp/ccGes4lc.o(.text+0x308): In function `main':
: undefined reference to `std::basic_ostream<char,
std::char_traits<char> >& std::endl<char, std::char_traits<char>
>(std::basic_ostream<char, std::char_traits<char> >&)'
/tmp/ccGes4lc.o(.text+0x30d): In function `main':
: undefined reference to `std::basic_ostream<char,
std::char_traits<char> >::operator<<(std::basic_ostream<char,
std::char_traits<char> >& (*)(std::basic_ostream<char,
std::char_traits<char> >&))'
/tmp/ccGes4lc.o(.text+0x36c): In function
`__static_initialization_and_destruction_0(int, int)':
: undefined reference to `std::ios_base::Init::Init()'
/tmp/ccGes4lc.o(.text+0x3bf): In function `__tcf_0':
: undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccGes4lc.o(.eh_frame+0x11): undefined reference to
`__gxx_personality_v0'
collect2: ld returned 1 exit status


D'ou cela vient t'il ? Est-ce a cause d'une bibiloteque ? pourtant le
ld.so.conf semble correct...

Je precise que je suis sous gentoo amd64 et quand j'emerge des prog c++
(genre des trucs comme firebird ou mozilla), emerge y parvient sans
probleme.


Merci de votre aide

3 réponses

Avatar
Denis Beauregard
Le Tue, 07 Dec 2004 01:21:32 +0100, matlerouge
écrivait dans
fr.comp.os.linux.configuration:

Bonjour

J'ai un probleme :

enc.C contient un programe tout simple en c++, en gros il y a un
#include <iostream> et plus loin un

std::cout << i << std::endl;

le pb c'est que ca compile (avec un gcc -o toto enc.C, mais ensuite :


Essaie avec g++.

Quand j'ai changé d'hébergeur, un vieux cgi ne compilait plus
et en fouillant un peu, on suggérait de passer à g++ au lieu de gcc.
Il semble que les librairies soient différentes.


Denis

Avatar
Nicolas George
Denis Beauregard wrote in message
:
Quand j'ai changé d'hébergeur, un vieux cgi ne compilait plus
et en fouillant un peu, on suggérait de passer à g++ au lieu de gcc.
Il semble que les librairies soient différentes.


Les options passées par gcc et g++ à ld sont différentes : essentiellement,
g++ rajouter -lstdc++, ce qui explique immédiatement la différence.

Avatar
no_spam
On Mon, 06 Dec 2004 23:53:38 +0000, Nicolas George wrote:

Denis Beauregard wrote in message
:
Quand j'ai changé d'hébergeur, un vieux cgi ne compilait plus
et en fouillant un peu, on suggérait de passer à g++ au lieu de gcc.
Il semble que les librairies soient différentes.


Les options passées par gcc et g++ à ld sont différentes : essentiellement,
g++ rajouter -lstdc++, ce qui explique immédiatement la différence.


J'ajouterai qu'il vaut mieux continuer à se servir de gcc pour tout car
il se débrouille pour passer les bonnes options à g++ quand il l'appelle.
En appellant g++ directement, il y a 90% de chances que les options
passées ne correspondent pas aux specs de gcc et qu'au final le code
généré soit suboptimal.
Donc la solution gcc ... -lstdc++ est de loin la meilleure.