私は現在、LinuxとuClibcでCを使用している組み込みプロジェクトに取り組んでいます。私たちはC++に移行することに興味がありますが、libstdC++でのリンクに伴うオーバーヘッドは欲しません。私の印象は、iostreamやベクトルなど、STLのものを使用しない限り、これが可能であるということです。libstdC++へのリンクを避ける
libstdC++にリンクせずにg ++にコンパイルを指示するにはどうすればよいですか?
私は現在、LinuxとuClibcでCを使用している組み込みプロジェクトに取り組んでいます。私たちはC++に移行することに興味がありますが、libstdC++でのリンクに伴うオーバーヘッドは欲しません。私の印象は、iostreamやベクトルなど、STLのものを使用しない限り、これが可能であるということです。libstdC++へのリンクを避ける
libstdC++にリンクせずにg ++にコンパイルを指示するにはどうすればよいですか?
コンパイルするときは、コンパイル時にg++ -c
を使用してください。次に、リンクするにはg++
の代わりにld
を使用してください。これはリンカを直接呼び出しますが、コマンドライン(libcとlibcrtを含む)上のすべてのライブラリを指定する必要があります。
あなたは「より良いC」としてのG ++を使用している場合あるいは、あなたは(自動的にlibcの含まれます)最終的なリンクステップのためのgcc
を使用することができるかもしれ
あなたは
g++ -nodefaultlibs -fno-exceptions a.cc
を使用することができます
しかし、あなたは完全性と正確性のためにこの方法を備え++すべてのC ...
を使用することはできません。
g++ -c -fno-exceptions a.cpp
gcc a.o -o a
これを試してみると、リンクしようとすると「__gxx_personality_v0」への未定義の参照が得られます。 – Brian
私はあなたがC++固有の機能を使っていることを意味していると思います。それがどの機能なのかはわかりません。 –
さて、私はthis questionを参照して作業するようになった。あなたは "g ++ -fno-exceptions -c"でコンパイルし、別々にリンクする必要があります。 – Brian