トップページ > 過去ログ > 記事閲覧
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.1 )
名前:たかぎ 日時:2011/04/26 20:40

少し書き忘れがありました。 DXライブラリのビルドに用いたGCCのバージョンを教えていただけないでしょうか?
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.2 )
名前:管理人 日時:2011/05/03 19:57

ご報告ありがとうございます ご指摘の箇所を修正することで私の手元でも MinGW ( GCC 4.5.2 )でのコンパイルが成功することを確認しました 現在公開されているバージョンでは DirectShow を使った機能が使えないので、MinGW でサンプルプログラムのビルドを 確認したときは件の箇所がコンパイルから外れるマクロを定義した状態でコンパイルしたため、後から「使い方」ページに 記載されている件の箇所がコンパイルから外れるマクロを定義しない状態でコンパイルされる設定での MinGW のサンプルプログラムの ビルドのテストが抜けてしまっていました( GCC版の動作チェックは今のところ Dev-C++ でのみ行っているため ) > 最後に、Dev-C++を用いることを前提とした説明をされているようですが、Dev-C++に付属しているGCCは3.4.2です。 > このころのバージョンのMinGWは、確か--enable-sjlj-exceptionsオプションを付けてビルドされたものなので、リンクエラーを起こす気がするのですが、いかがでしょうか(試していません)? 基本的にGCC版の動作チェックは Dev-C++ で行っていますので、リンクエラーは発生していないことは確認できています 経緯としては最初に MinGW( GCC 4.5.2 )でDXライブラリのaファイルをビルドしたのですが、それが Dev-C++ では 使えなかったので Dev-C++ ( GCC 3.4.2 )でDXライブラリのaファイルをビルドするようにしました > DXライブラリのビルドに用いたGCCのバージョンを教えていただけないでしょうか? Dev-C++ でビルドしていますので、3.4.2 となります 修正版をアップしましたのでよろしければお試しください ( 正式版は今作成中の機能の実装が終わったら更新する予定です ) http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
( No.FI )
名前: 日時:

Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.3 )
名前:いっち 日時:2011/08/05 19:48

コンパイルエラーではなくリンクエラーについてです。 雑談&質問掲示板 の レス[2899] を参考に MinGW+MSYS 環境でDXライブラリを使用してみたのですが、 コンパイルは成功しても、その後のリンク時に DxUseCLib.a から 「undefined reference to `_Unwind_SjLj_Register'」といったエラーが大量に発生してリンクに失敗してしまいます。 おそらく DxUseCLib.a を MinGW 環境でリビルドすればうまくいくのだと思うのですが、 それ以外に解決する手段があればご教授下さい。 使用しているDXライブラリのバージョンは 3.05f、gcc のバージョンは 4.5.2 です。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.4 )
名前:管理人 日時:2011/08/07 00:41

ご指摘ありがとうございます 私の環境でもリンクに失敗しました ( 環境変数 Path の設定で Dev-C++ 内のリンカが優先されるようになってしまっていました ) Dev-C++ が使用している MinGW のバージョンでも最新の MinGW のバージョンでもどちらでも使える lib ファイルを作成するのは難しそうなので、DXライブラリの次のバージョンを 公開するときには MinGW 用の libファイルを別途用意しようと思います
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.5 )
名前:いっち 日時:2011/08/07 20:32

了解しました。お手数おかけしてすみません。 個人的にはメインで使用している環境が VS2008 なので、 DXライブラリが MinGW で使えなくても今すぐ困るということはありません。 ※追記 ライブラリのファイル名についてなのですが、 gcc では -l オプションで渡されたライブラリしか検索してくれないようです。 (もしかしたら、何らかのオプションで非標準な名前のライブラリを検索することが 出来るのかも知れません。ご存知の方がいらっしゃいましたらご教授下さい。) 現在は手作業でファイル名を変えていますが、 ライブラリの名前を lib<name>.a という形式に統一して頂く事は可能でしょうか?
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.6 )
名前:管理人 日時:2011/08/21 04:27

> 現在は手作業でファイル名を変えていますが、 > ライブラリの名前を lib<name>.a という形式に統一して頂く事は可能でしょうか? ファイル名が DxLib.a や DxUseCLib.a では何か不都合があるのでしょうか?
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.7 )
名前:いっち 日時:2011/08/21 12:13

> ファイル名が DxLib.a や DxUseCLib.a では何か不都合があるのでしょうか? いいえ。前回書き込んだとおり、ライブラリのファイル名を手動で変更するか、 フルパスで指定すれば良い話なので、特に問題はありません。 それと、雑談&質問掲示板のレス[2954]に > ライブラリファイルが見つからないとリンカに怒られてしまいましたので、 > スマートではありませんが確実な方法としてプロジェクトフォルダにDXライブラリの > ファイルをすべてコピーする、という方法を「使い方」ページに載せることにしました といった、記述がありましたので、この問題の対策方法の一つではないかと思い要望をさせて頂きました。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.8 )
名前:管理人 日時:2011/09/03 23:54

すいません gcc の -l の仕様を詳しく知りませんでした、デフォルトでは指定したファイル名の 前後にそれぞれ lib と .a が付加されるんですね 確かに libDxLib.a や libDxUseCLib.a などの名前にした方が良さそうですので、 次のバージョンではそうしたいと思います ご提案ありがとうございました m(_ _)m
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.9 )
名前:いっち 日時:2011/09/04 18:34

> 次のバージョンではそうしたいと思います よろしくお願いします。 書き漏れていましたが、名前を変更していただきたいのは gcc用のライブラリだけです。 VC++用やbcc用のライブラリはそのままの名前で問題ありません。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.10 )
名前:管理人 日時:2011/09/18 18:06

> 書き漏れていましたが、名前を変更していただきたいのは gcc用のライブラリだけです。 はい、承知しております GCC用のライブラリファイルのみファイル名を変更する予定です
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.11 )
名前:リトル 日時:2011/09/20 17:30

GCC4.6.1でリンクエラーがたくさん出ました。 無理な要望かもしれませんが、GCC4.5.2のときみたいなのをお願いできないでしょうか? ちなみに、DXライブラリ(ver3.06a) と GCC4.5.3 で正常に動作しました。
Re: GCC 4.5.2でコンパイルしたときにエラーになります ( No.12 )
名前:いっち 日時:2011/09/20 20:06

> GCC4.6.1でリンクエラーがたくさん出ました。 どのようなエラーでしょうか? ためしに私のMinGW環境でビルドしてみましたが、やはり(No.3)のようなリンクエラーが出ました。 DXライブラリのバージョンは 3.06a(MinGW用)、gcc のバージョンは 4.5.2 です。 ちょっと時間がとれず検証できていないのですが、管理人さんの環境では問題なくビルドが成功するのでしょうか?

Page: 1 | 2 |