Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MinGW x64にて巨大なコンパイル単位のコンパイルに失敗する #9

Open
yossi-tahara opened this issue Dec 4, 2016 · 3 comments

Comments

@yossi-tahara
Copy link
Owner

commented Dec 4, 2016

Issue #8 で報告した問題です。

MinGW x64で自動テストプログラムをコンパイルする際にFile too bigエラーがでてコンパイルできません。
この問題は、Compilation fails with MinGW-64 (gcc 4.8.1) #177で報告されているMinGW x64不具合と同じものと思われます。

そこで、上記報告にある対策で-O3 -Wa,-mbig-objを付けたところコンパイルは通るようになりましたが、通常数分で終わるビルドが1時間経過しても終わりません。ld.exeがいつまでも走ってます。途中で中断しました。

上記報告によるとこれはMinGW 4.9以前のもので確認され、その後5.3でも発生するとの報告があります。
また、この報告にgcc 6では発生しなかったとの報告があるのでMinGW 6.2.0でトライしましたが、File too bigは発生しました。

msvc、gcc、 MinGWx32でのビルドとテストにはPASSします。
そこで、v0.4.1ではMinGWx64のみ自動テストを少し縮小しています。

@yossi-tahara

This comment has been minimized.

Copy link
Owner Author

commented Dec 5, 2016

SourceForuge.netのMinGWプロジェクトで同じ問題を報告している人がいました。
そのスレッドにこの問題の再現手順を報告しました。

この問題は、多数の異なるクラスを実体化すると発生するようです。

MinGWx64は、8,192個のクラス生成で発生しました。
MinGWx32は、8,192個では発生しないですが、12,288個では発生します。
msvcは、12,288個でも発生せず、65,536の時は/bigobjオプションを付けろとエラーが出ます。
 このオプションは付けても問題ないので元々つけています。
ubuntuのgccでは、特に何も指定しなくとも12,288個でも発生しません。

@yumetodo

This comment has been minimized.

Copy link

commented May 14, 2018

これ、リンクするときが問題なのならば、DLLに分割してあげるとどうですかね・・・?

@yossi-tahara

This comment has been minimized.

Copy link
Owner Author

commented May 15, 2018

アセンブラが出しているエラーのようです。コンパイル単位を小さく分割すれば通ることは判っているのですが、それなりに手間がかかるのでテストそのものをシュリンクしてます。char, short, intなど全ての型の組み合わせテストを、int型だけにシュリンクする的な方法です。
gccとmsvcではシュリンクしていないフルテストに通るので事実上テストは出来ていると考えています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.