2

(私は通常C++ではなくCを使用しているので、この質問を許してください:)

GPL に該当しないように、libstdc++ なしで MinGW-GCC C++11 (フリースタンディングと呼ばれる) を使用しようとしています。

私はそれを機能させるのに苦労しましたが、これはほとんど私が望むことをします:

g++ main.cpp -o main.exe -s -Os -lkernel32 -luser32 
  -std=c++11 -Wall -Werror 
  -Wl,-e_Main -mwindows
  -nostdlib -ffreestanding -fno-rtti -fno-exceptions

最後の問題は、例外が欲しいということです。そのため、-fno-exceptionsもう一度削除すると、

main.cpp:(.text+0x265): undefined reference to `_Unwind_Resume'
main.cpp:(.eh_frame+0xcb): undefined reference to `__gxx_personality_v0'
bad reloc address 0xcb in section `.eh_frame'

これらのヘルパー関数は、スタックを巻き戻し、そのパスでデストラクタを呼び出すために必要であることがわかりました。(これらが標準ライブラリの一部と見なされるのは少しおかしいと思います。gcc がそれらなしでコア言語を提供できない場合、それらは組み込みである必要があります。)

たとえば、STLport と Apache stdcxx を見てきましたが、どちらも C++11 ではなく、例外だけが必要です!

例外が機能するように、必要なヘルパー関数だけを提供する方法はありますか?

4

0 に答える 0