Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens des erreurs « Symboles non définis » lors de la compilation de code C simple sur macOS ?

Pourquoi est-ce que j'obtiens des erreurs « Symboles non définis » lors de la compilation de code C simple sur macOS ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-09 01:43:14566parcourir

Why Am I Getting

Erreur lors de la compilation du code C simple

Question :
Je reçois une erreur lors de la compilation d'un programme C de base sur macOS Lion.

Code :

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    for (int i = 0; i < 10; i++)
    {
        cout << "hi";
        cout << endl;
    }

    return 0;
}

Compilation Commande :

cc main.cpp

Erreur :

Undefined symbols for architecture x86_64:
  "std::cout", referenced from:
      _main in ccBdbc76.o
  "std::basic_ostream<char, std::char_traits<char> > &amp; std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> > &amp;, char const*)", referenced from:
      _main in ccBdbc76.o
  "std::basic_ostream<char, std::char_traits<char> > &amp; std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> > &amp;)", referenced from:
      _main in ccBdbc76.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<< (std::basic_ostream<char, std::char_traits<char> > &amp; (*)(std::basic_ostream<char, std::char_traits<char> > &amp;))", referenced from:
      _main in ccBdbc76.o
  "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int)in ccBdbc76.o
  "std::ios_base::Init::~Init()", referenced from:
      ___tcf_0 in ccBdbc76.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

Réponse :

Ce type d'erreur est généralement se produit lorsque le code C est compilé à l’aide du front-end C. Bien que le compilateur C comprenne et compile le fichier en tant que C , il échoue lors de la liaison en raison de références manquantes aux bibliothèques C. Pour résoudre ce problème, assurez-vous que vous utilisez plutôt le compilateur C. Remplacez cc par g ou clang lors de la compilation du code :

g++ main.cpp
clang++ main.cpp

L'utilisation du bon compilateur C lie le code aux bibliothèques nécessaires et résout les erreurs de symboles non définis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn