G++ Undefined Reference std::
J'ai travaillé sur le portage de l'un de mes jeux sous Linux et n'arrive pas à comprendre les raisons pour les erreurs, je suis reçu. Le jeu a été initialement écrit en Visual Studio 2010 et j'ai extrait tous les contenus (en-têtes, rpc, textures) et suis en train de compiler.
Compilation de fichiers à l'aide de g++ -c -o exampleFile.o exampleFile.cpp
fonctionne très bien sans aucune erreur. Cependant, au moment de la liaison, je suis accueilli avec des centaines d'erreurs concernant les mst fonctions, par exemple:
Bmp.o: In function `Image::Bmp::Bmp()':
Bmp.cpp:(.text+0x58): undefined reference to `std::allocator<char>::allocator()'
Bmp.cpp:(.text+0x74): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
Bmp.cpp:(.text+0x80): undefined reference to `std::allocator<char>::~allocator()'
Bmp.cpp:(.text+0x91): undefined reference to `std::allocator<char>::~allocator()'
Pleine de sortie peut être trouvé sur PasteBin
La Bmp.cpp
fichier est une fonction de la bibliothèque écrite par quelqu'un d'autre, il peut être trouvé ici Le code échappé ci-dessus est:
#include <fstream>
#include <iostream>
#include <cstring>
#include "Bmp.h"
using std::ifstream;
using std::ofstream;
using std::ios;
using std::cout;
using std::endl;
using namespace Image;
///////////////////////////////////////////////////////////////////////////////
//default constructor
///////////////////////////////////////////////////////////////////////////////
Bmp::Bmp() : width(0), height(0), bitCount(0), dataSize(0), data(0), dataRGB(0),
errorMessage("No error.")
{
}
Bmp::Bmp(const Bmp &rhs)
{
//copy member variables from right-hand-side object
width = rhs.getWidth();
height = rhs.getHeight();
bitCount = rhs.getBitCount();
dataSize = rhs.getDataSize();
errorMessage = rhs.getError();
if(rhs.getData()) //allocate memory only if the pointer is not NULL
{
data = new unsigned char[dataSize];
memcpy(data, rhs.getData(), dataSize); //deep copy
}
else
data = 0; //array is not allocated yet, set to 0
if(rhs.getDataRGB()) //allocate memory only if the pointer is not NULL
{
dataRGB = new unsigned char[dataSize];
memcpy(dataRGB, rhs.getDataRGB(), dataSize); //deep copy
}
else
dataRGB = 0; //array is not allocated yet, set to 0
}
Pas vraiment sûr de ce qu'est la question, mais il me semble que l'éditeur de liens ne peut pas atteindre les mst fonctions? Merci d'avance pour toute aide.
Modifier la Liaison de commande: gcc -o LDTux Bmp.o character.o chickenList.o chicken.o farmList.o farm.o fieldList.o field.o generall_utils.o landscape.o object.o SZ_NumberList.o SZ_Sprite.o worm.o wormList.o wormSpawn.o wormSpawnList.o GameWorld.o HelloOpenGL.o -lGL -lglut -lm
gcc
plutôt que d'utiliser g++
. Vous pourriez avoir LD = g++
dans votre Makefile.Vous avez raison, j'ai été en utilisant
gcc
plutôt que g++
. Merci pour l'œil!post de réponse, à proximité, aller de l'avant.. 😉
OriginalL'auteur Tomassino | 2013-09-25
Vous devez vous connecter pour publier un commentaire.
Comme souligné plus haut, par Dietmar Kühl dans les commentaires,
vous devriez changer l'éditeur de liens de commande de
gcc
àg++
.OriginalL'auteur sehe
Comme l'a souligné par Dietmar Kühl dans les commentaires, j'ai été en utilisant
gcc
de lien, plutôt que deg++
.Lors de la modification de la liaison de commande, j'ai reçu
...undefined reference to 'gluLookAt'
qui a été résolu par l'ajout d'-lGLU
.OriginalL'auteur Tomassino