我正在研究一個當前在Linux和uClibc中使用C的嵌入式項目。我們有興趣將它轉移到C++,但我不希望與libstdC++中的鏈接相關的開銷。我的印象是,這是可能的,只要我們不使用STL中的任何東西,比如iostream或vector。避免鏈接到libstdC++
如何直接g ++編譯而不連接到libstdC++?
我正在研究一個當前在Linux和uClibc中使用C的嵌入式項目。我們有興趣將它轉移到C++,但我不希望與libstdC++中的鏈接相關的開銷。我的印象是,這是可能的,只要我們不使用STL中的任何東西,比如iostream或vector。避免鏈接到libstdC++
如何直接g ++編譯而不連接到libstdC++?
編譯時只能使用g++ -c
進行編譯。然後爲了鏈接,使用ld
而不是g++
。這會直接調用鏈接器,但需要您在命令行上命名所有庫(包括libc和libcrt)。
或者,如果你使用G ++作爲一個「更好的C」,您可以使用gcc
你的最後一個環節,步驟(其中將包括libc中自動)
你可以使用
g++ -nodefaultlibs -fno-exceptions a.cc
但你不能使用所有C++特性這樣...
的完整性和正確性的緣故:
g++ -c -fno-exceptions a.cpp
gcc a.o -o a
當我嘗試這個時,我試圖鏈接時得到「未定義的引用__gxx_personality_v0」。 – Brian 2009-10-31 01:30:07
我認爲這意味着你正在使用一些C++特有的功能。至於它是哪個功能,我不確定。 – 2009-10-31 02:47:30
好的,我通過參考this question得到它的工作。您必須使用「g ++ -fno-exceptions -c」進行編譯,然後單獨鏈接。 – Brian 2009-10-31 17:28:01