2009-10-31 88 views
13

我正在研究一個當前在Linux和uClibc中使用C的嵌入式項目。我們有興趣將它轉移到C++,但我不希望與libstdC++中的鏈接相關的開銷。我的印象是,這是可能的,只要我們不使用STL中的任何東西,比如iostream或vector。避免鏈接到libstdC++

如何直接g ++編譯而不連接到libstdC++?

回答

10

編譯時只能使用g++ -c進行編譯。然後爲了鏈接,使用ld而不是g++。這會直接調用鏈接器,但需要您在命令行上命名所有庫(包括libc和libcrt)。

或者,如果你使用G ++作爲一個「更好的C」,您可以使用gcc你的最後一個環節,步驟(其中將包括libc中自動)

+0

當我嘗試這個時,我試圖鏈接時得到「未定義的引用__gxx_personality_v0」。 – Brian 2009-10-31 01:30:07

+0

我認爲這意味着你正在使用一些C++特有的功能。至於它是哪個功能,我不確定。 – 2009-10-31 02:47:30

+0

好的,我通過參考this question得到它的工作。您必須使用「g ++ -fno-exceptions -c」進行編譯,然後單獨鏈接。 – Brian 2009-10-31 17:28:01

9

你可以使用

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

但你不能使用所有C++特性這樣...

2

的完整性和正確性的緣故:

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