Problème avec SDL_net et Debian

Démarré par Sam101, 10 Juillet 2008 à 18:34

0 Membres et 1 Invité sur ce sujet

Salut ! J'ai un petit problème de C++  :mrgreen:. J'ai un programme serveur qui compile et fonctionne parfaitement chez moi, mais qui doit être recompilé pour fonctionner sur mon serveur (Je suis sous Ubuntu 8.04 et mon serveur sous Debian Etch) a cause de différences de libC.
Seulement... Voila, sur mon serveur, ça compile pas  :ninja:

Citation
root@r12166:/home/sam101/tlow/src# make
g++ -o tlowS main.cpp map.cpp player.cpp pnj.cpp server.cpp world.cpp data/char2int.cpp data/int2char.cpp -lSDLmain -lSDL -lSDL_net -lmysqlclient
server.cpp: In function 'int Client(void*)':
server.cpp:72: error: invalid conversion from 'const void*' to 'void*'
server.cpp:72: error:   initializing argument 2 of 'int SDLNet_TCP_Send(_TCPsocket*, void*, int)'
server.cpp:113: error: invalid conversion from 'const void*' to 'void*'
server.cpp:113: error:   initializing argument 2 of 'int SDLNet_TCP_Send(_TCPsocket*, void*, int)'
server.cpp:120: error: invalid conversion from 'const void*' to 'void*'
server.cpp:120: error:   initializing argument 2 of 'int SDLNet_TCP_Send(_TCPsocket*, void*, int)'
[...]
server.cpp:308: error: invalid conversion from 'const void*' to 'void*'
server.cpp:308: error:   initializing argument 2 of 'int SDLNet_TCP_Send(_TCPsocket*, void*, int)'
server.cpp:310: error: invalid conversion from 'const void*' to 'void*'
server.cpp:310: error:   initializing argument 2 of 'int SDLNet_TCP_Send(_TCPsocket*, void*, int)'
server.cpp:316: error: invalid conversion from 'const void*' to 'void*'
server.cpp:316: error:   initializing argument 2 of 'int SDLNet_TCP_Send(_TCPsocket*, void*, int)'
La ligne en question est celle-ci
Citation
SDLNet_TCP_Send(client,send.c_str(),send.size());
Je sais que c_str() renvoie un const char*, mais pourquoi cela ne fonctionne  chez moi et pas sur mon serveur (j'utilise pourtant le même Makefile...).
Merci beaucoup ^^.

C'est bizarre parce qu'ubunu est basé sur debian.
Enfin c'est pas ici que tu devrais poser ta question.  :rolleyes:
Je t' lily.

Regex / Les ravages de linux
CitationDites, dans un CV, faut mettre si on préfère vim ou emacs ?
Dis papa comment on fait les bébé
[/table

Même makefile mais visiblement pas le même compilateur. L'un va te laisser couler ton problème de conversion tandis que l'autre va gueuler. Tu devrais plutôt chercher un autre moyen d'appeler ta méthode (en passant un argument correct par exemple ? :ninja: s'il n'aime pas les const char* alors passe lui un char* de même valeur) plutôt que de chercher d'où ça vient car là c'est une question de compilateurs permissifs ou non.

Citation de: Geomaster le 10 Juillet 2008 à 23:18
Même makefile mais visiblement pas le même compilateur. L'un va te laisser couler ton problème de conversion tandis que l'autre va gueuler. Tu devrais plutôt chercher un autre moyen d'appeler ta méthode (en passant un argument correct par exemple ? :ninja: s'il n'aime pas les const char* alors passe lui un char* de même valeur) plutôt que de chercher d'où ça vient car là c'est une question de compilateurs permissifs ou non.
Dans les deux cas, c'est G++ installé exactement de la même manière...

Sinon on m'a donné la solution :
Citation
SDLNet_TCP_Send(client,const_cast<char*>(buffer.c_str()),buffer.size());
Et ça supprime le const ^^.
Je pense que je vais faire une macro, c'est lourd a ecrire a chaque fois :mrgreen:.

Même version exactement ? Vu que ce n'est pas le même OS, on ne sait jamais...

Donc comme je disais, il fallait mieux trouver un moyen de contourner le problème que de chercher d'où il venait. La preuve, dans un cas ça marche et pas dans l'autre. Enfin, maintenant tu as une solution ^^

11 Juillet 2008 à 10:52 #5 Dernière édition: 11 Juillet 2008 à 11:00 par Sam101
Citation de: Geomaster le 11 Juillet 2008 à 10:06
Même version exactement ? Vu que ce n'est pas le même OS, on ne sait jamais...

Donc comme je disais, il fallait mieux trouver un moyen de contourner le problème que de chercher d'où il venait. La preuve, dans un cas ça marche et pas dans l'autre. Enfin, maintenant tu as une solution ^^
Je sais pas, par contre la version de GLIBC est pas la même entre les deux (2.3.X pour Debian et 2.7.X pour Ubuntu il me semble) ^^.

En même temps, Ubuntu est une variante de Debian donc bon..

Comme quoi compiler sur plusieurs machines ça peut servir, l'erreur venait bien de moi  :mrgreen:.

EDIT:Je crois qu'il est a deplacer le topic ^^.

D'après http://packages.debian.org/stable/devel/ sur Debian Etch on en est à g++ 4.1.1 Sur mon Ubuntu j'ai la 4.2.3.
Au niveau des Glibs c'est bien 2.7 pour Ubuntu, et pour Etch la 2.3.6
Bref tu as pas mal de chance que le comportement soit un peu différent.
Citation
Ash Nazg Durbatulùk, Ash Nazg Gimbatul,
Ash Nazg Thrakatulùk agh bruzum-ishi krimpatul.
The fellowship of the Ring - J.R.R. Tolkien

Citation de: BenObiWan le 11 Juillet 2008 à 11:03
D'après http://packages.debian.org/stable/devel/ sur Debian Etch on en est à g++ 4.1.1 Sur mon Ubuntu j'ai la 4.2.3.
Au niveau des Glibs c'est bien 2.7 pour Ubuntu, et pour Etch la 2.3.6
Bref tu as pas mal de chance que le comportement soit un peu différent.
Pas mal de chance ou pas de chance ?  :ninja:.

Citation de: Sam101 le 11 Juillet 2008 à 11:19
Citation de: BenObiWan le 11 Juillet 2008 à 11:03
D'après http://packages.debian.org/stable/devel/ sur Debian Etch on en est à g++ 4.1.1 Sur mon Ubuntu j'ai la 4.2.3.
Au niveau des Glibs c'est bien 2.7 pour Ubuntu, et pour Etch la 2.3.6
Bref tu as pas mal de chance que le comportement soit un peu différent.
Pas mal de chance ou pas de chance ?  :ninja:.

Pas mal de chances, genre c'est très fortement probable quoi.