2009-10-31 9 views
13

Je travaille sur un projet embarqué qui utilise actuellement C sous Linux et uClibc. Nous sommes intéressés à le déplacer en C++, mais je ne veux pas l'overhead associé à la liaison dans libstdC++. Mon impression est que c'est possible à condition de ne rien utiliser de STL, comme iostream ou vector.Évitez les liens vers libstdC++

Comment diriger g ++ pour compiler sans lier à libstdC++?

Répondre

10

Lorsque vous compilez, utilisez g++ -c pour compiler uniquement. Ensuite, pour la liaison, utilisez ld au lieu de g++. Cela appelle directement l'éditeur de liens, ce qui vous oblige à nommer toutes vos bibliothèques sur la ligne de commande (y compris libc et libcrt).

Sinon, si vous utilisez g ++ comme « mieux c », vous pourrez peut-être utiliser gcc pour votre étape de liaison finale (qui comprendra libc automatiquement)

+0

Lorsque j'essaie ceci, j'obtiens "une référence non définie à' __gxx_personality_v0 '"en essayant de lier. – Brian

+0

Je pense que cela signifie que vous utilisez une fonctionnalité spécifique à C++. Quant à quelle caractéristique c'est, je ne suis pas sûr. –

+0

D'accord, je l'ai eu à travailler en se référant à this question. Vous devez compiler avec "g ++ -fno-exceptions -c" et ensuite lier séparément. – Brian

9

Vous pouvez utiliser

g++ -nodefaultlibs -fno-exceptions a.cc 

Mais vous ne pouvez pas utiliser toutes les fonctionnalités C++ de cette façon ...

2

Par souci d'exhaustivité et l'exactitude:

g++ -c -fno-exceptions a.cpp 
gcc a.o -o a 
Questions connexes