トップページ > 記事閲覧
gcc でのDxライブラリの環境構築について
名前:Kuro_Anpan 日時: 2021/08/11 20:34

「GNU C++ (MinGW) によるDxライブラリの使い方」を参考にして、「Dxライブラリを使用したプログラムの例」をコンパイル・リンクしようとしました。 リンクの段階でエラーが発生し、解決方法がわからず困っています。 「Dxライブラリを使用したプログラムの例」を test.cpp とし、 test.cpp と同じフォルダに「プロジェクトに追加すべきファイル_GCC(MinGW)用」内にあった 8_1_0_i686_w64_posix_dwarf_rt_v6_rev0 の中身全てを貼り付けました。 (g++(x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0 であることは確認しました) その後、test.cppが直下にあるディレクトリで以下のコマンドを実行しました。 >g++ -g -c test.cpp -DDX_GCC_COMPILE >g++ -o test.exe test.o \ libDxLib.a \ libDxUseCLib.a \ libDxDrawFunc.a \ libjpeg.a \ libpng.a \ libzlib.a \ libtiff.a \ libtheora_static.a \ libvorbis_static.a \ libvorbisfile_static.a \ libogg_static.a \ libbulletdynamics.a \ libbulletcollision.a \ libbulletmath.a \ libopusfile.a \ libopus.a \ libsilk_common.a \ libcelt.a \ -mwindows コンパイルは問題なくできたようでした(エラーや警告が出ませんでした)。 しかし、リンクの時点でundefined referece to `DxLib::DxLib_Init()'というようなエラーがDxライブラリの関数すべてに対し発生しました。 解決方法を教えていただけると幸いです。
メンテ

Page: 1 |

Re: gcc でのDxライブラリの環境構築について ( No.1 )
名前:管理人 日時:2021/08/13 00:51

手元では 8.1.0 でサンプルをビルドする時は以下のようなコマンドでコンパイル・リンクしています <最初に Sample.cpp をコンパイルして Sample.o を作成します> g++.exe -c -g -O0 Sample.cpp -o Sample.o -DDX_GCC_COMPILE -DDX_GCC_COMPILE_4_9_2 -DDX_NON_INLINE_ASM --input-charset=cp932 --exec-charset=cp932 -I"D:\MinGW_8_1_0_i686_w64_posix_dwarf_rt_v6_rev0\mingw32\lib\gcc\i686-w64-mingw32\8.1.0\include" -I"D:\MinGW_8_1_0_i686_w64_posix_dwarf_rt_v6_rev0\mingw32\lib\gcc\i686-w64-mingw32\8.1.0" -I"D:\MinGW_8_1_0_i686_w64_posix_dwarf_rt_v6_rev0\mingw32\include" -I"D:\MinGW_8_1_0_i686_w64_posix_dwarf_rt_v6_rev0\mingw32\i686-w64-mingw32\include" -I"D:\MinGW_8_1_0_i686_w64_posix_dwarf_rt_v6_rev0\include" -I"D:\DxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\8_1_0_i686_w64_posix_dwarf_rt_v6_rev0" <次に Sample.o とDXライブラリなどその他ライブラリをリンクして Sample.exe を作成します> g++.exe Sample.o -o Sample.exe -L"D:\DxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\8_1_0_i686_w64_posix_dwarf_rt_v6_rev0" -L"D:\MinGW_8_1_0_i686_w64_posix_dwarf_rt_v6_rev0\mingw32\lib" -L"D:\MinGW_8_1_0_i686_w64_posix_dwarf_rt_v6_rev0\mingw32\lib" -mwindows -lgcc -lDxLib -lDxUseCLib -lDxDrawFunc -ljpeg -lpng -lzlib -ltiff -ltheora_static -lvorbis_static -lvorbisfile_static -logg_static -lbulletdynamics -lbulletcollision -lbulletmath -lopusfile -lopus -lsilk_common -lcelt 上記のコマンドに書かれているパスの中の D:\MinGW_8_1_0_i686_w64_posix_dwarf_rt_v6_rev0 と D:\DxLib_GCC の部分は、それぞれ Kuro_Anpanさんのお手元の MinGW 8.1.0 のパスと DXライブラリMinGW版 のパスに置き換えてください m(_ _)m
メンテ
Re: gcc でのDxライブラリの環境構築について ( No.2 )
名前:Kuro_Anpan 日時:2021/08/13 16:57

回答ありがとうございます。 原因は(-m32を付けていたとしても)MinGWがどうも64bit版でコンパイルやリンクを行っていたことにあるようでした。 MinGWをアンインストールし、インストールし直したところ、なぜか偶然32bit環境のものをインストールしたようで、これでコンパイル・リンクすることでうまくいったようです。 以下のコマンドを実行することで、問題なく動作するようであるtest.exeを作成できました。 (test.cppと同じフォルダにDxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\8_1_0_i686_w64_posix_dwarf_rt_v6_rev0の中身が入ったDxlibraryというフォルダを作成しました。) >g++.exe -c test.cpp -o test.o -DDX_GCC_COMPILE -I"Dxlibrary" >g++.exe test.o -o test.exe -L"Dxlibrary" -lDxLib -lDxUseCLib -lDxDrawFunc -ljpeg -lpng -lzlib -ltiff -ltheora_static -lvorbis_static -lvorbisfile_static -logg_static -lbulletdynamics -lbulletcollision -lbulletmath -lopusfile -lopus -lsilk_common -lcelt -DDX_GCC_COMPILE_4_9_2 -DDX_NON_INLINE_ASM を入れずともtest.exeは問題なく機能したのですが、この二つのオプションはどのような場合に加えるべきなのでしょうか。
メンテ
Re: gcc でのDxライブラリの環境構築について ( No.3 )
名前:Kuro_Anpan 日時:2021/08/13 18:21

(追記) DrawCircle()を使おうとしたところ、作成したexeファイルを実行しようとした際にdllが存在しないと言われたので、リンク時のオプションに-staticを加えました。
メンテ
Re: gcc でのDxライブラリの環境構築について ( No.4 )
名前:管理人 日時:2021/08/14 02:19

無事コンパイル・リンクできたようで何よりです > -DDX_GCC_COMPILE_4_9_2 -DDX_NON_INLINE_ASM を入れずともtest.exeは問題なく機能したのですが、この二つのオプションはどのような場合に加えるべきなのでしょうか。 すみません、こちらはDXライブラリのソースをコンパイルするときに必要なオプションなのですが、 DXライブラリを使用するプログラムでは不要なオプションでした m(_ _;m > DrawCircle()を使おうとしたところ、作成したexeファイルを実行しようとした際にdllが存在しないと言われたので、リンク時のオプションに-staticを加えました。 ご情報ありがとうございます 今まで MinGW で作成した exeファイルは dllも一緒にないと実行できないので不便だと思っていたのですが、-static というオプションを追加すればよかったのですね… (・・;;
メンテ
Re: gcc でのDxライブラリの環境構築について ( No.5 )
名前:Kuro_Anpan(解決済) 日時:2021/08/14 06:53

なるほど、-DDX_GCC_COMPILE_4_9_2 と-DDX_NON_INLINE_ASM は必ずしも必要ではないのですね。 -staticでDrawCircle()が動くのは確認できたのですが、私は-staticがどのようなdllをどうリンクしているのかは理解できてないので、これでは不十分なのかもしれません。 ほとんど理解できてないのですが、どうも-staticはあまり使わないほうが良いようです。 Visual Studioのリリースは-staticを付けてリンクしているのかと思っていたのですが、そんな簡単な話ではないということでしょうか…。 ともかく、無事に動作する実行ファイルを作ることができました。 親切かつ迅速な対応をありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存