Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/06/2009, à 18:55

rodjarc

undefined reference to `confGetBool(char*, char*, int*)

Bonjour je développe actuellement un programme utilisant cette lib :
http://www.cppfrance.com/codes/LIRE-ECR … 21752.aspx
mais je reçois ce message d'erreur lors de la compilation :

obj/Release/main.o||In function `parametre_bool()':|
obj/Release/config.o||In function `parametre_bool()':|
config.cpp:(.text+0xdd)||undefined reference to `confGetBool(char*, char*, int*)'|
obj/Release/main.o||In function `parametre_bool()':|
main.cpp:(.text+0x23d)||undefined reference to `confGetBool(char*, char*, int*)'|
||=== Build finished: 2 errors, 0 warnings ===|

voila mon code

bool parametre_bool()
{
int bVal;
bool rev;
confGetBool( "Config.conf", "Fullscreen" , &bVal   );
if(bVal==1)
{
    rev=true;
}
else if (bVal==0)
{
 rev=false;
}
else
{
rev=NULL;
}
return rev;
}

merci d'avance


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#2 Le 07/06/2009, à 19:40

kenpachi_clem

Re : undefined reference to `confGetBool(char*, char*, int*)

Salut,

Peux tu nous montrer la fonction confGetBool  ?


-----------------------------------------------------------------------------------------------------------------------------------------
fixe : phenom X4 sous jaunty
portable : HP dv 6585 sous intrepid
ultra portable : DELL vostro 1220 sous karmic

Hors ligne

#3 Le 07/06/2009, à 19:45

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

elle fait partie d'une lebrairi que j'ai telechargé mais la voila :

DPExp int confGetBool( char *in_pszFile, char *in_pszName, int *out_pbValue )
{
	int		iLen	= 0,
			i		= 0,
			bIs		= 0;
	char *	pBuf	= NULL,
		 *	p		= NULL;
	FILE *	pFile	= NULL;

	if( !in_pszFile || !in_pszName || !out_pbValue )
		return -1;

	if( NULL == (pFile = fopen( in_pszFile, "r" )) )
		return -2;

	fseek( pFile, 0L, SEEK_END );
	iLen = ftell( pFile );
	fseek( pFile, 0L, SEEK_SET );

	if( NULL == (p = pBuf = malloc( iLen )) )
		return -3;

	fread( pBuf, iLen, 1, pFile );

	while( *p ) {
		if( *p == '#' ) {
			while( *p != '\n' && *p != '\0' )
				p++;
			p++;
			continue;
		} else if( *p == in_pszName[0] ) {
			for( bIs = 1, i = 0 ; i < strlen( in_pszName ) ; i++, p++ ) {
				if( *p != in_pszName[i] ) {
					bIs = 0;
					break;
				}
			}
			if( bIs ) {
				while( isspace( *p ) )
					p++;

				if( *p++ != '=' ) {
					if( pBuf ) {
						free( pBuf );
						pBuf = NULL;
					}
					return -4;
				}

				while( isspace( *p ) )
					p++;

				switch( *p++ ) {
				case 't':
				case 'T':
					*out_pbValue = 1;
					break;
				case 'f':
				case 'F':
					*out_pbValue = 0;
					break;
				default:
					return -5;
				}

				fclose( pFile );
				if( pBuf ) {
					free( pBuf );
					pBuf = NULL;
				}
				return 1;
			} else {
				while( *p != '\n' && *p != '\0' )
					p++;
			}
		}
		while( *p != '\n' && *p != '\0' )
			p++;
		p++;
	}

	fclose( pFile );
	if( pBuf ) {
		free( pBuf );
		pBuf = NULL;
	}

	return -6;
}

//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#4 Le 07/06/2009, à 20:25

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

Personne
??


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#5 Le 07/06/2009, à 21:21

gilbert

Re : undefined reference to `confGetBool(char*, char*, int*)

ça a tout l'air d'être un problème d'include oublié ça...


Simplement moi-même..

Hors ligne

#6 Le 07/06/2009, à 22:16

nicolas.sitbon

Re : undefined reference to `confGetBool(char*, char*, int*)

gilbert a écrit :

ça a tout l'air d'être un problème d'include oublié ça...

Pas d'include, on dirait plutôt qu'il a oublié de lier sa bibliothèque.

Hors ligne

#7 Le 07/06/2009, à 22:20

gilbert

Re : undefined reference to `confGetBool(char*, char*, int*)

nicolas.sitbon a écrit :
gilbert a écrit :

ça a tout l'air d'être un problème d'include oublié ça...

Pas d'include, on dirait plutôt qu'il a oublié de lier sa bibliothèque.

A oui, parfaitement, tu as raison.. j'ai mal lu l'erreur et j'ai cru que c'était dans les fichiers sources et non dans les objets..


Simplement moi-même..

Hors ligne

#8 Le 08/06/2009, à 12:28

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

gilbert a écrit :
nicolas.sitbon a écrit :
gilbert a écrit :

ça a tout l'air d'être un problème d'include oublié ça...

Pas d'include, on dirait plutôt qu'il a oublié de lier sa bibliothèque.

A oui, parfaitement, tu as raison.. j'ai mal lu l'erreur et j'ai cru que c'était dans les fichiers sources et non dans les objets..

Est comment je vais pour lier une librairy ? ^^'


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#9 Le 08/06/2009, à 13:39

gilbert

Re : undefined reference to `confGetBool(char*, char*, int*)

bin quand tu compiles :

g++ fichier1.cpp -o fichier1.o
g++ fichier2.cpp -o fichier2.o
# etc...
g++ -o monProgramme fichier1.o fichier2.o (etc) -lmaLibManquante

Simplement moi-même..

Hors ligne

#10 Le 08/06/2009, à 19:54

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

Bon je c pas tros ce que j'ai fait mais j'ai un nouveau message d'erreur

/media/disk/Hockey subaquatique/Hockey Subaquatique/config.cpp||In function ‘bool parametre_bool()’:|
/media/disk/Hockey subaquatique/Hockey Subaquatique/config.cpp|11|attention : deprecated conversion from string constant to ‘char*’|
/media/disk/Hockey subaquatique/Hockey Subaquatique/config.cpp|11|attention : deprecated conversion from string constant to ‘char*’|
/media/disk/Hockey subaquatique/Hockey Subaquatique/config.cpp||In function ‘bool parametre_bool()’:|
/media/disk/Hockey subaquatique/Hockey Subaquatique/config.cpp|11|attention : deprecated conversion from string constant to ‘char*’|
/media/disk/Hockey subaquatique/Hockey Subaquatique/config.cpp|11|attention : deprecated conversion from string constant to ‘char*’|
||=== Build finished: 4 errors, 0 warnings ===|

^^


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#11 Le 08/06/2009, à 21:40

gilbert

Re : undefined reference to `confGetBool(char*, char*, int*)

en c++, tu dois inclure <string> et après utiliser la méthode c_str()

exemple pour une méthode qui appelle une string en c (donc un char* ou un const char*)

string maChaine("du texte");

alors il faudra passer en argument maChaine.c_str()

ça corrigera tes erreurs, mais j'attends de voir la suite.


Simplement moi-même..

Hors ligne

#12 Le 08/06/2009, à 21:56

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

Bon sa avance ^^

#include <iostream>
#include <IRR/irrlicht.h>
#include "config.h"
#include <string>
#include "dP_conf.h"

bool parametre_bool()
{
 string fichier("Config.conf");
 string pam("Fullscreen");

int bVal;
bool rev;
 confGetBool(fichier.c_str() ,pam.c_str()  , &bVal   );
if(bVal==1)
{
    rev=true;
}
else if (bVal==0)
{
 rev=false;
}
else
{
rev=NULL;
}
return rev;
}
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp||In function ‘bool parametre_bool()’:|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|9|erreur: ‘string’ was not declared in this scope|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|9|erreur: expected `;' before ‘fichier’|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|10|erreur: expected `;' before ‘pam’|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|14|erreur: ‘fichier’ was not declared in this scope|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|14|erreur: ‘pam’ was not declared in this scope|
||=== Build finished: 5 errors, 0 warnings ===|

Dernière modification par rodjarc (Le 08/06/2009, à 21:57)


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#13 Le 08/06/2009, à 22:29

gilbert

Re : undefined reference to `confGetBool(char*, char*, int*)

ouais faut encore rajouter un petit : using namespace std; après tes headers

Dernière modification par gilbert (Le 08/06/2009, à 22:29)


Simplement moi-même..

Hors ligne

#14 Le 09/06/2009, à 19:13

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

Auhhhh la boulette je suis dsl mais maintenant j'ai un autre code

/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp||In function ‘bool parametre_bool()’:|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|14|erreur: invalid conversion from ‘const char*’ to ‘char*’|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|14|erreur:   initializing argument 1 of ‘int confGetBool(char*, char*, int*)’|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|14|erreur: invalid conversion from ‘const char*’ to ‘char*’|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|14|erreur:   initializing argument 2 of ‘int confGetBool(char*, char*, int*)’|
||=== Build finished: 4 errors, 0 warnings ===|

big_smile:D


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#15 Le 09/06/2009, à 20:43

gilbert

Re : undefined reference to `confGetBool(char*, char*, int*)

hé ouais c'est normal.. en plus c'est très déconseillé de faire comme ça, car le pointeur retourné par c_str n'est garanti que pour l'instruction qui suit...

Si tu veux vraiment être formel il faut utiliser la fonction strcpy(3) pour récupérer un char* depuis le const char * retourné par c_str, illustration avec ton code:

// Il faut rajouter #include <cstring>

string fichier("Config.conf");
string pam("Fullscreen");
confGetBool(strcpy (cfichier, fichier.c_str()) ,strcpy (cpam, cpam.c_str())  , &bVal   );

mais là on commence vraiment à faire compliqué pour rien du tout... une solution beaucoup plus simple consiste à directement travailler avec des chaines C et pas C++

char * fichier = "Config.conf";
char * pam = "Fullscreen";
confGetBool(fichier ,pam  , &bVal  );

Ce qu'il faut juste retenir c'est que tu ne peux pas directement mettre une chaine de caractère dans les arguments de ta fonction car en c++ elle sera considérée comme une string et pas comme un array de char.


Simplement moi-même..

Hors ligne

#16 Le 09/06/2009, à 20:54

Link31

Re : undefined reference to `confGetBool(char*, char*, int*)

gilbert a écrit :

hé ouais c'est normal.. en plus c'est très déconseillé de faire comme ça, car le pointeur retourné par c_str n'est garanti que pour l'instruction qui suit...

Si tu veux vraiment être formel il faut utiliser la fonction strcpy(3) pour récupérer un char* depuis le const char * retourné par c_str

C'est complètement inutile dans ce cas. La méthode c_str() est parfaitement adaptée. Le problème est que la fonction confGetBool() prend un "char*" alors qu'elle devrait prendre un "const char*".

Si, pour une raison quelconque, il n'est pas possible de modifier la fonction confGetBool(), alors il y a deux possibilités. Soit on sait avec certitude que la fonction confGetBool() ne va pas faire de bêtises avec son char* (comme en modifier le contenu, par exemple), on peut lui passer c_str() casté avec un const_cast<const char*> sans inquiétude. Sinon, il faut passer par un strcpy() ou tout autre moyen d'obtenir un char* valide.

Hors ligne

#17 Le 09/06/2009, à 20:58

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

Toujours meme erreur avec

#include <iostream>
#include <IRR/irrlicht.h>
#include "config.h"
#include <string>
#include <cstring>

#include "dP_conf.h"
using namespace std;
bool parametre_bool()
{
char * fichier = "Config.conf";
char * pam = "Fullscreen";

int bVal;
bool rev;

confGetBool(fichier ,pam  , &bVal  );
if(bVal==1)
{
    rev=true;
}
else if (bVal==0)
{
 rev=false;
}
else
{
rev=NULL;
}
return rev;
}

^^ dsl de vous emmerder  pour si peu ^^


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#18 Le 09/06/2009, à 21:00

Link31

Re : undefined reference to `confGetBool(char*, char*, int*)

"Config.conf" et "Fullscreen" sont des "const char*", que tu le veuilles ou non.

Corrige plutôt ta fonction confGetBool().

Hors ligne

#19 Le 09/06/2009, à 21:02

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

oula oula c'est pas MA FONCTION faut t'il vrai que j'y touche pour la passer en string ?


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#20 Le 09/06/2009, à 21:04

gilbert

Re : undefined reference to `confGetBool(char*, char*, int*)

en fait, j'ai simplement proposé strcpy(3) pour éviter le cast... Pour moi dans le mesure du possible où l'on peut ne pas s'astreindre de faire des cast, évitons-les... Après je peux raisonner faux, et j'ai tout à apprendre. Je ne suis qu'un écolier j'ai pas énormément d'années d'expériences en programmation...

Dernière modification par gilbert (Le 09/06/2009, à 21:07)


Simplement moi-même..

Hors ligne

#21 Le 09/06/2009, à 21:09

Link31

Re : undefined reference to `confGetBool(char*, char*, int*)

rodjarc a écrit :

oula oula c'est pas MA FONCTION faut t'il vrai que j'y touche pour la passer en string ?

Passe-la au moins en "const char*". Si une bibliothèque est mal écrite (et c'est clairement le cas ici), il faut en premier lieu essayer de corriger la bibliothèque, le contournement étant à utiliser en dernier recours.

Je ne sais pas ce que fait exactement cette fonction, mais vu son nom et vu le but de la bibliothèque on devine facilement qu'elle n'a pas du tout besoin de prendre un "char*" en argument.

edit : ok, tu avais posté le code de la fonction. Donc je confirme, change les "char*" en "const char*" et ça devrait aller.

Dernière modification par Link31 (Le 09/06/2009, à 21:11)

Hors ligne

#22 Le 09/06/2009, à 21:29

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

Bon j'espère ke c'est la dernier fois ke je vous embête mais voila un autre problème

obj/Debug/main.o||In function `parametre_bool()':|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|9|multiple definition of `parametre_bool()'|
obj/Debug/config.o:/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|9|first defined here|
obj/Debug/config.o||In function `parametre_bool()':|
config.cpp:(.text+0xf2)||undefined reference to `confGetBool(char const*, char const*, int*)'|
obj/Debug/main.o||In function `parametre_bool()':|
main.cpp:(.text+0x2be)||undefined reference to `confGetBool(char const*, char const*, int*)'|
||=== Build finished: 4 errors, 0 warnings ===|

avec

#include <iostream>
#include <IRR/irrlicht.h>
#include "config.h"
#include <string>


#include "dP_conf.h"
using namespace std;
bool parametre_bool()
{
char fichier[15] = "Config.conf";
char  pam[15] = "Fullscreen";

int bVal;
bool rev;

confGetBool(fichier ,pam  , &bVal  );
if(bVal==1)
{
    rev=true;
}
else if (bVal==0)
{
 rev=false;
}
else
{
rev=NULL;
}
return rev;
}

//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#23 Le 09/06/2009, à 21:43

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

Sa marche enfin presque voici le nouveau bug

obj/Debug/main.o||In function `parametre_bool()':|
/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|9|multiple definition of `parametre_bool()'|
obj/Debug/config.o:/media/disk/Hockey_subaquatique/Hockey_Subaquatique/config.cpp|9|first defined here|
obj/Debug/config.o||In function `parametre_bool()':|
config.cpp:(.text+0xf2)||undefined reference to `confGetBool(char const*, char const*, int*)'|
obj/Debug/main.o||In function `parametre_bool()':|
main.cpp:(.text+0x2be)||undefined reference to `confGetBool(char const*, char const*, int*)'|
||=== Build finished: 4 errors, 0 warnings ===|

avec

#include <iostream>
#include <IRR/irrlicht.h>
#include "config.h"
#include <string>


#include "dP_conf.h"
using namespace std;
bool parametre_bool()
{
char fichier[15] = "Config.conf";
char  pam[15] = "Fullscreen";

int bVal;
bool rev;

confGetBool(fichier ,pam  , &bVal  );
if(bVal==1)
{
    rev=true;
}
else if (bVal==0)
{
 rev=false;
}
else
{
rev=NULL;
}
return rev;
}

//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#24 Le 10/06/2009, à 20:35

rodjarc

Re : undefined reference to `confGetBool(char*, char*, int*)

Personne ? ?


//ubuntu 9.10//intel core 2 duo 2.6 GHz//ati radeon//

Hors ligne

#25 Le 10/06/2009, à 20:43

gilbert

Re : undefined reference to `confGetBool(char*, char*, int*)

un char const * n'est pas un const char* mais pourquoi utilises-tu du style C dans du code c++ ?? le fond du problème est là...

utilises strcpy et ça ira


Simplement moi-même..

Hors ligne