GCC de l'éditeur de liens ne pouvez pas trouver la bibliothèque standard?
J'ai été l'élaboration d'un projet d'école dans XCode. Le produit final doit être soumis dans le code source avec un makefile, j'ai donc écrit un makefile et de lancer la compilation de cette façon, pour s'assurer que j'avais une copie de travail. Voici mon makefile:
all: main.o StackList.o world.o Farm.o
gcc main.o StackList.o world.o Farm.o -g -o Project1
main.o:
gcc -g -c main.cpp
StackList.o:
gcc -g -c Stacklist.cpp
world.cpp:
gcc -g -c world.cpp
Farm.cpp:
gcc -g -c Farm.cpp
clean:
rm *.o Project1
Compilation de chacun des fichiers de l'objet, qui fonctionne bien, mais quand il arrive à "toutes les," l'étape de liaison, il semble ne pas être au courant de la bibliothèque standard. Je reçois des "symboles non définis" erreur de everythin de "cin", "basic_string", "opérateur de nouveau".
J'étais sous l'impression que ces choses n'ont pas besoin d'être indiqué directement, et en fait n'ont pas besoin de le faire dans le passé.
Aucune idée de ce qui se passe?
EDIT:
Si cela peut aider, voici le début de la (très long) message d'erreur:
Undefined symbols for architecture x86_64:
"std::cin", referenced from:
_main in main.o
"std::cout", referenced from:
_main in main.o
Farm::print(int) in Farm.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
_main in main.o
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int)in main.o
__static_initialization_and_destruction_0(int, int)in StackList.o
__static_initialization_and_destruction_0(int, int)in world.o
__static_initialization_and_destruction_0(int, int)in Farm.o
"std::ios_base::Init::~Init()", referenced from:
___tcf_0 in main.o
___tcf_0 in StackList.o
___tcf_0 in world.o
___tcf_0 in Farm.o
"operator new(unsigned long)", referenced from:
doStackSearch(std::basic_istream<char, std::char_traits<char> >*, std::list<Farm*, std::allocator<Farm*> >*&)in world.o
OriginalL'auteur xanderflood | 2012-01-18
Vous devez vous connecter pour publier un commentaire.
De lien de code C++, vous devez utiliser le
g++
de commande, pas legcc
commande.Lors de la compilation, le
gcc
commande sait que c'est la compilation de code C++ à cause de la.cpp
suffixe (mais c'est une bonne idée d'utiliser leg++
commande de toute façon).Lors de la liaison, la
gcc
commande voit tout un tas de.o
fichiers. Leg++
de commande diffère de lagcc
commande qu'il sait où trouver le C++des bibliothèques spécifiques.(Le fait que le nom
gcc
renvoie à la fois à la commande, qui est généralement utilisé pour compiler du code C, et de la "GNU compiler Collection" comme un ensemble, peut être un peu déroutant.)OriginalL'auteur Keith Thompson
Vous devez utiliser
g++
pour compiler et lier le code source C++, pasgcc
.Aussi, vous pouvez laisser de côté toutes les cibles en plus de la première et de la dernière.
make
sait comment compiler.cpp
fichiers.o
déjà -- vous n'avez pas à lui dire comment.OriginalL'auteur duskwuff
Ce qui, dans cette ligne de commande pensez-vous dit
gcc
le lien dans le standard C++ library? Il n'y a pas de C++ fichiers liés. Vous n'avez pas spécifié de la langue. Et vous appelez la compilter commegcc
.OriginalL'auteur David Schwartz