トップページ > 過去ログ > 記事閲覧
GCC 4.5.2でコンパイルしたときにエラーになります
名前:たかぎ 日時: 2011/04/26 20:37

DXライブラリVer3.05を使って、GCC 4.5.2(MinGWです)でコンパイルしようとするとエラーになります。 試したソースコードは、「Gnu C++ ( Bloodshed Dev−C++ )によるDXライブラリの使い方」の「5.プログラムを組む」に掲載されているものです。 エラーの内容ですが... DxDirectX.hの6854行目が、  D_IMediaSample *D_CTransInPlaceFilter::Copy(D_IMediaSample *pSource); のようになっているために発生しています。  D_IMediaSample *Copy(D_IMediaSample *pSource); とすべきではないでしょうか? とりあえず、上記を修正すれば、コンパイルに成功し、実行することもできました。 また、同じくDxDirectX.hの6770行目と6892行目で、文字列リテラルをconst修飾されていないTCHAR*またはCHAR*型の引数に渡そうとしているために警告されます。 この文字列は、関数内部で変更される可能性があるのでしょうか? その場合、省略時実引数に文字列リテラルを指定するのは問題だと思います。 そうではない場合、const修飾子が必要ではないでしょうか? 最後に、Dev-C++を用いることを前提とした説明をされているようですが、Dev-C++に付属しているGCCは3.4.2です。 このころのバージョンのMinGWは、確か--enable-sjlj-exceptionsオプションを付けてビルドされたものなので、リンクエラーを起こす気がするのですが、いかがでしょうか(試していません)? DXライブラリについては詳しくないので見当違いなことをいっている部分もあるかもしれませんが、気付いた点について報告させていただきます。 なお、詳細な経緯については下記を参照してください。 HTTP://dixq.net/forum/viewtopic.php?f=3&t=8314#p68026

Page: 1 | 2 |

Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.13 )
名前:リトル 日時:2011/09/21 11:29

> どのようなエラーでしょうか? (No.3)のようなリンクエラーです。 GCC4.5系は問題なく動作しますが、4.6系は上記のようなエラーが出ます。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.14 )
名前:いっち 日時:2011/09/21 19:29

リトルさん> > GCC4.5系は問題なく動作しますが、4.6系は上記のようなエラーが出ます。 GCC4.5系では問題ないとのことですが、私の環境の gcc 4.5.2 ではうまくいきません。 お手数ですが、4.5系、4.6系それぞれのコンパイラに -v オプションを指定して起動した結果を 掲示板に貼り付けて頂けますでしょうか? ちなみに私が使用している gcc では以下のような結果になります。 $ g++ -v Using built-in specs. COLLECT_GCC=C:\MinGW\bin\g++.exe COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.5.2/lto-wrapper.exe Target: mingw32 Configured with: ../gcc-4.5.2/configure --enable-languages=c,c++,ada,fortran,obj c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgo mp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-r untime-libs --disable-werror --build=mingw32 --prefix=/mingw Thread model: win32 gcc version 4.5.2 (GCC)
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.15 )
名前:リトル 日時:

GCC4.5.3 $ ./gcc.exe -v Using built-in specs. COLLECT_GCC=E:\MinGW\cross-mingw-w64.gcc453.20110720\bin\gcc.exe COLLECT_LTO_WRAPPER=e:/mingw/cross-mingw-w64.gcc453.20110720/bin/../libexec/gcc/ i686-w64-mingw32/4.5.3/lto-wrapper.exe Target: i686-w64-mingw32 Configured with: ../src/configure --prefix=/mingw_new --with-sysroot=/mingw_new --with-build-sysroot=/mingw_new --build=i686-w64-mingw32 --target=i686-w64-mingw 32 --with-gmp=/mingw_new/sup --with-mpfr=/mingw_new/sup --with-mpc=/mingw_new/su p --with-libelf=/mingw_new/sup --with-ppl=/mingw_new/sup --with-cloog=/mingw_new /sup --disable-ppl-version-check --disable-cloog-version-check --with-host-libst dcxx='-lstdc++ -lsupc++' --disable-shared --enable-static --disable-bootstrap -- disable-win32-registry --enable-threads=win32 --enable-languages=c,c++ --enable- version-specific-runtime-libs --disable-multilib --disable-rpath --with-system-z lib --disable-werror --disable-nls --enable-decimal-float --disable-debug --enab le-lto --enable-64bit --enable-largefile --enable-sjlj-exceptions --enable-fully -dynamic-string --enable-libssp --enable-libgomp Thread model: win32 gcc version 4.5.3 (x86.generic.Komisar) (GCC) GCC4.6.1 $ gcc -v Using built-in specs. COLLECT_GCC=E:\MinGW\bin\gcc.exe COLLECT_LTO_WRAPPER=e:/mingw/bin/../libexec/gcc/mingw32/4.6.1/lto-wrapper.exe Target: mingw32 Configured with: ../gcc-4.6.1/configure --prefix=/mingw --build=mingw32 --with-a rch=native --with-tune=native --enable-languages=c,c++,objc,obj-c++ --enable-lib gomp --disable-werror --enable-threads --disable-nls --disable-win32-registry -- disable-sjlj-exceptions --with-dwarf2 --enable-cloog-backend=isl --enable-lto -- with-system-zlib --with-host-libstdcxx=-lstdc++ --enable-libstdcxx-debug --enabl e-cxx-flags='-fno-function-sections -fno-data-sections' --disable-libstdcxx-pch --enable-version-specific-runtime-lib
2011/09/21 22:56 ( No.s --disable-bootstrap
Thread model: win32
gcc version 4.6.1 (GCC)

GCC4.6.1は自分でビルドしました。GCC4.5.3は、
http://komisar.gin.by/mingw/index.html
からとったのを全く関係ないとこに設置してフルパスで指定してためしに使ったものです。
)
名前:211.120.173.185 日時:   <w65OPTRvcO2y2>

Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.16 )
名前:リトル 日時:2011/09/21 23:08

上記サイトからとったGCC4.6.1で問題なく動作しました。 自前ビルドのGCC4.6.1がダメだったみたいです。 お手数をおかけしてすいませんでした。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.17 )
名前:いっち 日時:2011/09/22 00:31

> GCC4.6.1は自分でビルドしました。GCC4.5.3は、 > http://komisar.gin.by/mingw/index.html > からとったのを全く関係ないとこに設置してフルパスで指定してためしに使ったものです。 そのサイトで配布されている gcc がどのような用途(64bit用?)を想定したものか分かりませんが、 どうやら --enable-sjlj-exceptions を指定してコンパイルされた物のようです。 MinGW の公式で配布されている gcc 4.5.2(とおそらく 4.6.1)は --disable-sjlj-exceptions が指定されているので、 最新のDXライブラリ 3.06a ではリンクエラーが発生するのだと思います。 --enable-sjlj-exceptions と --disable-sjlj-exceptions のどちらが一般的なオプションなのかとか、 オプションがどの程度の頻度で変更されるものかとかは、ちょっと分かりません。 ※追記 リトルさん> もしかすると、リトルさんのご使用の環境では Dev-C++ 用のライブラリでもうまく動作するかもしれません。 もし宜しければお試し下さい。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.18 )
名前:管理人 日時:2011/10/02 23:32

> ちょっと時間がとれず検証できていないのですが、管理人さんの環境では問題なくビルドが成功するのでしょうか? 簡単なサンプルプログラムのビルドができることは確認しています 私はこちら http://www.mingw.org/ からダウンロードしたのですが、 どのサイトからダウンロードするのが一般的なんでしょう・・・ 因みに gcc を -v オプションで実行したときのログは以下の通りです C:\MinGW\bin>g++ -v Using built-in specs. COLLECT_GCC=g++ Target: mingw32 Configured with: ../gcc-4.5.2/configure --enable-languages=c,c++,ada,fortran,obj c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgo mp --disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-r untime-libs --disable-werror --build=mingw32 --prefix=/mingw Thread model: win32 gcc version 4.5.2 (GCC)
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.19 )
名前:いっち 日時:2011/10/03 20:42

> 私はこちら > > h t t p://w w w.mingw.org/ > > からダウンロードしたのですが、 > どのサイトからダウンロードするのが一般的なんでしょう・・・ 私もそのサイトのインストーラを使用してセットアップした環境をほぼそのまま使用しています。 > 因みに gcc を -v オプションで実行したときのログは以下の通りです 私の環境の gcc とほぼ同じようですね。 あらためて最初からやり直してみたのですが、ライブラリを -l オプションで渡した場合も、 ライブラリをカレントディレクトリに入れて直接指定した場合も、 やはり libDxUseCLib.a のリンクで以下の4つが __gxx_personality_sj0 _Unwind_SjLj_Register _Unwind_SjLj_Unregister _Unwind_SjLj_Resume undefined reference とされてしまいました。 (DXライブラリは正式公開版の 3.06a を使用) 原因不明で正直なところギブアップ気味なのですが、 もし、ここがおかしいとか、こうすれば出来るはずといった情報をお持ちの方がいらっしゃいましたら、 ご教授下さい。よろしくお願いします。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.20 )
名前:リトル 日時:2011/10/03 22:26

いっちさん、返事おくれてすいません。 > MinGW の公式で配布されている gcc 4.5.2(とおそらく 4.6.1)は --disable-sjlj-exceptions が指定されているので、 > 最新のDXライブラリ 3.06a ではリンクエラーが発生するのだと思います。 --enable-sjlj-exceptionsをつけて、MinGW公式のオプションを参考に個々のライブラリから全部コンパイルしなおしました。 $ gcc -v Using built-in specs. COLLECT_GCC=E:\MinGW\bin\gcc.exe COLLECT_LTO_WRAPPER=e:/mingw/bin/../libexec/gcc/mingw32/4.6.1/lto-wrapper.exe Target: mingw32 Configured with: ../gcc-4.6.1/configure --prefix=/mingw --build=mingw32 --with-a rch=native --with-tune=native --enable-languages=c,c++,objc,obj-c++ --enable-sha red --enable-libgomp --enable-threads --disable-nls --disable-win32-registry --e nable-sjlj-exceptions --with-dwarf2 --enable-cloog-backend --enable-lto --with-s ystem-zlib --enable-libstdcxx-debug --disable-libstdcxx-pch --enable-version-spe cific-runtime-libs Thread model: win32 gcc version 4.6.1 (GCC) これで問題なく使えました。 この過程でわかったのですが、 C:\MinGW\lib\gcc\mingw32\4.6.1 C:\MinGW\libexec\gcc\mingw32\4.6.1 の2つのフォルダを消してから新しいGCCを入れないとうまくいかなかったです。 4.5.2もこの階層にあるので、リネームして入れなおしてみてはいかがでしょうか?
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.21 )
名前:いっち 日時:2011/10/03 22:31

返信ありがとうございます。 > --disable-sjlj-exceptionsをつけて、MinGW公式のオプションを参考に個々のライブラリから全部コンパイルしなおしました。 ついていないように見受けられるのですが? --enable-sjlj-exceptions にしたということでしょうか?
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.22 )
名前:リトル 日時:2011/10/03 22:40

> --enable-sjlj-exceptions にしたということでしょうか? そうです。すぐ書き直したのに間に合わなかったみたいです。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.23 )
名前:いっち 日時:2011/10/03 23:23

リトルさん> なるほど。少し入れ違いになったようですね。 検証ありがとうございます。 私の個人的な推測によると、本件を解決するためにはリトルさんがなさったように --enable-sjlj-exceptions を指定してビルドされた gcc を用意するか、 --disable-sjlj-exceptions を指定してビルドされた gcc を使ってビルドされた libDxUseCLib.a を 用意する必要があると思っていました。(時間が取れたら後者の方法を試してみるつもりでいます) しかし、管理人さんからのレス(No.18)によると --disable-sjlj-exceptions でビルドされた gcc でも 問題なくビルドできているとのご報告があり、困惑している次第です。 私と管理人さんの環境はほぼ同じようなのですが、gcc のビルドオプション以外に何か心当たりがございますでしょうか? それと --enable-sjlj-exceptions をつけてビルドされた gcc であれば Dev-C++ 用のDXライブラリも 使用できるのではないかと思うのですが、お手数ですがお試し頂けますでしょうか?
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.24 )
名前:tkmakwins15 日時:2011/10/04 22:02

横槍すみません。ビルド報告です。 環境は、下記サイトよりダウンロードしたgcc-4.5.2(sjlj)をフリーの統合開発環境Code::Blocksで使用しております。 (h t t p)://tdm-gcc.tdragon.net/ DXライブラリは、Dev-C++用を使用しております。 g++ -vの結果 Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=c:/mingw32/bin/../libexec/gcc/mingw32/4.5.2/lto-wrapper.exe Target: mingw32 Configured with: ../../src/gcc-4.5.2/configure --build=mingw32 --enable-languages=c,c++,ada,fortran,objc,obj-c++ --enable-threads=win32 --enable-libgomp --enable-lto --enable-fully-dynamic-string --enable-libstdcxx-debug --enable-version-specific-runtime-libs --with-gnu-ld --disable-nls --disable-win32-registry --disable-symvers --disable-werror --prefix=/mingw32tdm --with-local-prefix=/mingw32tdm --enable-cxx-flags='-fno-function-sections -fno-data-sections' --with-pkgversion=tdm-1 --enable-sjlj-exceptions --with-bugurl=(http)://tdm-gcc.tdragon.net/bugs Thread model: win32 gcc version 4.5.2 (tdm-1) 結果としては、コンパイル&リンクは(大量の警告は出たものの)無事に通りました。 プロジェクトをファイル共有サイトにアップしておきますので、ご参照ください。 (h t t p s)://(w3回).webfile.jp/dl.php?i=951564&s=7831b0556472e8eead7e 一番確実な方法は、関連する全てのライブラリをソースファイルからビルドしてしまうことだとは思います。 GCCは本質的に、バージョンどころかパッケージによっても互換性が保証できませんから… (注:URLは括弧はとって半角にしてください。)
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.25 )
名前:いっち 日時:2011/10/05 21:16

tkmakwins15さん> ご報告ありがとうございます。 ご紹介頂いたサイト(h t t p://tdm-gcc.tdragon.net/)から Bundle Installer tdm-gcc-4.6.1 MinGW / sjlj を利用してセットアップした環境でテストしてみました。 結果、Dev-C++用、MinGW用どちらのDXライブラリでも同一の gcc(enable-sjlj-exceptions) でビルドできることが確認できました。 現在の検証結果をまとめますと以下のようになります。 コンパイラ DXライブラリ ビルド結果 (1) sjlj有効 DevC++用 OK <- 今回の結果。意図通り、問題なし。 (2) sjlj有効 MinGW用 OK <- 今回の結果。NGと予想していたが外れた。とりあえずは問題なし? (3) sjlj無効 DevC++用 NG <- 意図通り、問題なし。ライブラリを2つに分けた要因。 (4) sjlj無効 MinGW用 ?? <- 管理人さんの環境ではOK、私やリトルさんの環境ではNG。原因不明。 ※コンパイラの「sjlj有効」は Dev-C++ のデフォルト、「sjlj無効」は MinGW のデフォルトと思われる ※DXライブラリは正式公開版の 3.06a を使用 誤りや追加の情報などございましたらお知らせ下さい。よろしくお願いします。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.26 )
名前:tkmakwins15 日時:2011/10/05 22:00

sjlj無効(=dwarf有効)の場合、例外のハンドラにデバッグ情報を用いますが、どうもこれに関してディストリビューションごとの互換性がないようですね。 ちなみに、MinGWのバイナリディストリビューションはちょっとググるだけでこんなに見つかります。 (これが全てではありませんが…) h ttp://code.google.com/p/mingw-builds/downloads/list
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.27 )
名前:管理人 日時:2011/10/09 20:40

> いっちさん 凡ミスで Dev-cpp の g++ を使ってコンパイルしてしまっていたかもしれないことが分かりました もしかしたらこちらのバージョンでは No.25 に載せていただいたテストの結果が変わるかもしれませんので、 何度も申し訳ありませんがよろしければお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用 ただ、これでも駄目でしたら・・・ よろしければ Dev-cpp のフォルダを _Dev-cpp というようにリネームして 確実に Dev-cpp の gcc が使用されないようにした上で再度 No.25 と同様の結果になるかどうか お試しになっていただけないでしょうか? > tkmakwins15さん tkmakwins15さんの仰られる通りだとしますと MinGW版の配布はするだけ混乱の元になってしまうかもしれませんね・・・
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.28 )
名前:いっち 日時:2011/10/10 19:39

管理人さん> ご提供頂いたDXライブラリでテストしてみたところ、私の MinGW環境(公式配布)にて問題なくビルドすることが出来ました。 (No.25)のテストを行った結果は以下のようになりました。 コンパイラ DXライブラリ ビルド結果 (1) sjlj有効 DevC++用 OK <- 意図通り、問題なし。 (2) sjlj有効 MinGW用(new) NG <- 今回の結果。前回と異なり意図通り、問題なし。 (3) sjlj無効 DevC++用 NG <- 意図通り、問題なし。 (4) sjlj無効 MinGW用(new) OK <- 今回の結果。意図通り、問題なし。 特に(2)の結果が前回と異なりリンクエラーとなっていることを考えると、 管理人さんが懸念されている通り MinGW用のライブラリも Dev-C++(sjlj) でビルドされていたようです。 ちなみに _Unwind_Resume と __gxx_personality_v0 が undefined reference とされていました。 お忙しい中ご対応ありがとうございました。 > > tkmakwins15さん > tkmakwins15さんの仰られる通りだとしますと MinGW版の配布はするだけ混乱の元になってしまうかもしれませんね・・・ 現在のところ致命的なエラーが発生する要因は sjlj か dwarf-2 かという違いだけのようですので、 Dev-C++(sjlj)用とMinGW(dwarf-2)用でその2種類をご提供いただければ問題ないと思います。 もちろん、MinGW や dwarf-2 はサポートしないというのであれば、それはそれで問題ないと思います。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.29 )
名前:いっち 日時:2011/10/13 20:32

レス(No.27)でご提供頂いたDXライブラリと MinGW を使ってテストプログラムを作ってみました。 しかし、DrawString は動作するのですが、DrawBox や DrawPixel が動作しないようでした。 ためしに、SetUse3DFlag を FALSE に設定すると動作しました。 また、Dev-C++用、VS用のライブラリでは問題ありませんでした。 もし、お心当たりがあるようでしたら、ご確認のほどよろしくお願いします。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.30 )
名前:管理人 日時:2011/10/16 21:58

ご報告ありがとうございます 私の手元でも確認できました、DrawLine,DrawPixel,DrawBox 辺りがアウトでした・・・ ただ、原因は特定できませんでした、結局、最適化をOFFにしたら直ったというオチです 最適化ONで初めて明るみになるバグというのもありますが、BorlandC++、VisualC++、 Dev-C++バージョンのGnuC++では最適化ONでも発生しないのでもしかしたらコンパイラのバグかもしれません 迷いましたが、とりあえず件の関数が記述されている DxGraphics2.cpp だけを最適化OFFで コンパイルすることにしました もしよろしければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.31 )
名前:いっち 日時:2011/10/17 22:06

正式公開版のDXライブラリ 3.06c を利用して問題なく動作することを確認しました。 ご対応ありがとうございました。 > Dev-C++バージョンのGnuC++では最適化ONでも発生しないのでもしかしたらコンパイラのバグかもしれません > 迷いましたが、とりあえず件の関数が記述されている DxGraphics2.cpp だけを最適化OFFでコンパイルすることにしました 微妙なところですね。次のバージョンで発生しなくなっていればいいのですが・・・。 ライブラリのビルドに使用しているMAKEファイルやバッチファイルのようなものが、もし、あればご提供頂くことは可能でしょうか?

Page: 1 | 2 |