Quand est-il nécessaire d'utiliser le drapeau -stdlib = libstdc ++?
Quand faut-il utiliser le drapeau -stdlib=libstdc++
pour le compilateur et l'éditeur de liens lors de la compilation avec gcc?
Le compilateur utilise-t-il automatiquement libstdc ++?
J'utilise gcc4.8.2 sur Ubuntu 13.10 et j'aimerais utiliser le standard c ++ 11. Je passe déjà -std=c++11
au compilateur.
Sous Linux: En général, toutes les distributions linux couramment disponibles utiliseront libstdc ++ par défaut, et toutes les versions modernes de GCC sont livrées avec un libstdc ++ qui prend en charge C++ 11. Si vous voulez compiler le code c ++ 11 ici, utilisez l’un des suivants:
g++ -std=c++11 input.cxx -o a.out
g++ -std=gnu++11 input.cxx -o a.out
sur OS X avant Mavericks: g++
était en fait un alias pour clang++
et l'ancienne version de libstdc ++ d'Apple étaient la version par défaut. Vous pouvez utiliser libc ++ (qui inclut le support de la bibliothèque c ++ 11) en passant -stdlib=libc++
. Si vous voulez compiler le code c ++ 11 ici, utilisez l’un des suivants:
g++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
g++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out
clang++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
clang++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out
sur OS X depuis Mavericks: libc ++ est la valeur par défaut. Vous pouvez utiliser l'ancienne version d'Apple de libstdc ++ (qui n'inclut pas le support de la bibliothèque c ++ 11) en transmettant -stdlib=libstdc++
clang++ -std=c++11 input.cxx -o a.out
clang++ -std=gnu++11 input.cxx -o a.out
Quand est-il nécessaire d'utiliser le drapeau
-stdlib=libstdc++
Pour le compilateur et l'éditeur de liens lors de la compilation avec gcc?
Réponse courte: jamais
Réponse plus longue: -stdlib
Est un drapeau Clang et ne fonctionnera avec aucune version de GCC jamais publiée. Sur Mac OS X, les commandes gcc
et g++
Sont en réalité des alias pour Clang not GCC, et la version de libstdc ++ que Apple = ships est ancien (circa 2008), bien entendu, il ne prend pas en charge C++ 11. Cela signifie que, sous OS X, lorsque Clang prétend prétendre être GCC, vous pouvez utiliser -stdlib=libc++
Pour sélectionner la nouvelle bibliothèque de Clang compatible C++ 11, ou vous pouvez utiliser -stdlib=libstdc++
Pour sélectionner la version antique pré-C++ 11 de libstdc ++ qui appartient à un musée. Linux gcc
et g++
Sont en réalité GCC pas Clang, et l'option -stdlib
Ne fonctionnera pas du tout.
Le compilateur utilise-t-il automatiquement libstdc ++?
Oui, GCC utilise toujours libstdc ++ sauf si vous lui indiquez d'utiliser la bibliothèque standard non avec l'option -nostdlib
(Auquel cas vous devez soit éviter d'utiliser les fonctions de la bibliothèque standard, soit utiliser -I
Et -L
Et -l
Pour le diriger vers un autre jeu de fichiers d'en-tête et de bibliothèque).
J'utilise gcc4.8.2 sur Ubuntu 13.10 et j'aimerais utiliser le standard c ++ 11. Je passe déjà
-std=c++11
Au compilateur.
Vous n'avez rien d'autre à faire. GCC est livré avec sa propre implémentation de la bibliothèque standard C++ (libstdc ++) qui a été développée et testée parallèlement à GCC afin que la version de GCC et la version de libstdc ++ soient compatibles à 100%. Si vous compilez avec -std=c++11
, Les fonctionnalités C++ 11 du compilateur g++
Sont activées, ainsi que les fonctionnalités C++ 11 des en-têtes libstdc ++.
Le compilateur utilise automatiquement libstdc ++, si vous utilisez l'interface g ++, pas l'interface gcc.