gcc compiler du code C++: undefined reference to `opérateur new[](unsigned long long)'

Il y a un code C++:

#include <stdio.h>

int main() {

int b = sizeof('a');
if(b==4) printf("I'm a C program!\n");
else printf("I'm a C++ program!\n");
}

Le compiler comme ceci:

gcc main.cpp -o main

Il réussit et donne:

I'm a C++ program!

Puis ajouter une ligne quelque part à l'intérieur de la fonction main

int *p1 = new int [1000];

Il échoue avec:

C:\Users\...\AppData\Local\Temp\cccJZ8kN.o:main1.cpp:(.text+0x1f): undefined reference to operator new[](unsigned long long)'
collect2.exe: error: ld returned 1 exit status

Puis les deux commandes suivantes réussi à compiler le code:

gcc main.cpp -o main -lstdc++

et

g++ main.cpp -o main

Le compilateur minGW-win64 (http://mingw-w64.sourceforge.net/).

Les questions sont:

  1. Lequel des deux dernières commandes sont mieux?
  2. À mon esprit gcc correctement choisit le droit compilateur, mais utilise ensuite un mauvais éditeur de liens. Est-il juste?
  3. Qu'il peut être un problème dans minGW-win64?

Que je vois (corrigez-moi si c'est faux) gcc a été conçu pour être un programme qui prend en entrée et décide quoi faire avec elle. Donc je ferais mieux d'utiliser gcc si cela a fonctionné sans -lstdc++. Mais si il n'est pas possible je vais vous préférez l'utilisation de g++ plutôt que de ne-sais-quoi gcc peut manquer.

Merci beaucoup pour vos considérations

  • gcc C, g++ est pour le C++. gcc -lstdc++ pourraient travailler pour le C++, mais vous devriez vraiment juste utiliser g++ pour le C++.
  • En aparté, un programme C++ a sizeof 'A' == 1, tout un programme C a sizeof 'A' == sizeof(int). Dans certaines implémentations, les deux sont vrais en même temps de toute façon.
  • Voir aussi stackoverflow.com/questions/172587/...
  • Merci pour vos réponses les gars! Comme je vois, il doit être le comportement attendu de minGW-win64. Va choisir g++ pour l'instant.
InformationsquelleAutor Alex | 2014-12-09