こんにちわ
C++は2年ほどで、ライブラリの使い方は書いてあるのを真似た経験しかないです
MinGWでcode::blocksというIDEを使ってみたくなり、ただのコンパイルはできたのですが
DXライブラリのリンク?が上手くいかないです
エラーには undefined reference to `DxLib::~' というのがでています
検索してみると、リンカーの順番が間違っている、
makefileというのの中に書く、~.oと~.aの順番が逆になっている等とでました
リンカーの設定はDXライブラリ(MinGW用)の使い方ページからコピペしました
makefileはプロジェクトフォルダ内に見当たらないのと
作るにも初心者には難しく、手間がかかるだけという話もあって躊躇してます
アドバイス等よろしくおねがいします
code::blocks(MinGW)でのDXライブラリの使い方について
Re: code::blocks(MinGW)でのDXライブラリの使い方について
私のホームページhttp://cswin10.nisinippon.com/cs/cs1/vs ... /dx01.htmlにVsualStudio用のMakefileでDxlibを使う方法を書いたのですが。Dxlibの説明を読むとMinGW とDXライブラリは相当に相性が良くないみたいですね。VsualStudioでは初歩的知識だけで書けたのですが。(VsualStudioではVS2008からMakefileを使わなくなり全面的にBuildファイルに変わりました)まず無理なきがしますね...
----------------------------------------------------------------------------------------------------------------------------------------------
MinGW 用DXライブラリを使用したプログラムをリンクする際は、以下のオプションを追加して、aファイルをリンクする必要があります。
-lDxLib
-lDxUseCLib
-lDxDrawFunc
-ljpeg
-lpng
-lzlib
-ltiff
-ltheora_static
-lvorbis_static
-lvorbisfile_static
-logg_static
-lbulletdynamics
-lbulletcollision
-lbulletmath
-lopusfile
-lopus
-lsilk_common
-lcelt
順番を変えると正常にリンクされないことがありますので、上記の順番通りに入力してください。
-------------------------------------------------------------------------------------------------------
とあってなぜこんなことが必要になるのか。(変わったコンパイラーとしか思えないですね)
----------------------------------------------------------------------------------------------------------------------------------------------
MinGW 用DXライブラリを使用したプログラムをリンクする際は、以下のオプションを追加して、aファイルをリンクする必要があります。
-lDxLib
-lDxUseCLib
-lDxDrawFunc
-ljpeg
-lpng
-lzlib
-ltiff
-ltheora_static
-lvorbis_static
-lvorbisfile_static
-logg_static
-lbulletdynamics
-lbulletcollision
-lbulletmath
-lopusfile
-lopus
-lsilk_common
-lcelt
順番を変えると正常にリンクされないことがありますので、上記の順番通りに入力してください。
-------------------------------------------------------------------------------------------------------
とあってなぜこんなことが必要になるのか。(変わったコンパイラーとしか思えないですね)
Re: code::blocks(MinGW)でのDXライブラリの使い方について
Windows 7 x64
GCC 4.8.1
Code::Blocks 16.01
DXライブラリ Ver3.17a
DXライブラリ置き場 使い方説明を参考にする
GNU GCC Compilerを選択
Win32 GUI Projectのプロジェクトを作成
Project > Build Options...において、DebugとRelease両方で以下の設定を行う
ツールバーのBuild and runボタンを押す
この手順で、無事プログラムが実行されてフルスクリーンになり、中央に白い点が出ました。
まずはMinGWとcode::blocksとDXライブラリのバージョンを教えてください。
何らかの方法(ユーザー登録したりアップローダーを使うのがめんどくさければ、アーカイブをbase64エンコードなど)でプロジェクトもいただけると、解析して問題点がわかるかもしれません。
GCC 4.8.1
Code::Blocks 16.01
DXライブラリ Ver3.17a
DXライブラリ置き場 使い方説明を参考にする
GNU GCC Compilerを選択
Win32 GUI Projectのプロジェクトを作成
Project > Build Options...において、DebugとRelease両方で以下の設定を行う
- Compiler settingsタブでの中のOther compiler optionsタブの入力欄にコンパイル時に必要なコンパイルオプションをコピペ
(参考:もう一度Build Optionsを開いたら#definesの設定に変換されていました) - Linker settingsのOther linker optionsにリンク時に必要なオプションをコピペ
- Search directoriesのCompilerとLinkerにそれぞれ「プロジェクトに追加すべきファイル_GCC(MinGW)用\4_8_1」のパスを追加
#include "DxLib.h"
// プログラムは WinMain から始まります
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1 ; // エラーが起きたら直ちに終了
}
DrawPixel( 320 , 240 , GetColor( 255,255,255 ) ) ; // 点を打つ
WaitKey() ; // キー入力待ち
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
この手順で、無事プログラムが実行されてフルスクリーンになり、中央に白い点が出ました。
まずはMinGWとcode::blocksとDXライブラリのバージョンを教えてください。
何らかの方法(ユーザー登録したりアップローダーを使うのがめんどくさければ、アーカイブをbase64エンコードなど)でプロジェクトもいただけると、解析して問題点がわかるかもしれません。
- 添付ファイル
-
- cbtest.zip
- プロジェクトファイルおよびコンパイルしたバイナリ
- (7.1 MiB) ダウンロード数: 117 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: code::blocks(MinGW)でのDXライブラリの使い方について
>Mathさん
makefileはやはり難しそうですね
GCCをwindows向けに移植したのがMinGWらしいので変わってるのは確かになんだと思います
>みけCATさん
試してみましたが、コンパイルできませんでした
エラーログです
C:\DxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\4_8_1/libDxUseCLib.a(DxUseCLib.o):DxUseCLib.cpp:(.text+0x2fb4): undefined reference to `_Unwind_Resume'
C:\DxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\4_8_1/libDxUseCLib.a(DxUseCLib.o):DxUseCLib.cpp:(.eh_frame+0x5af): undefined reference to `__gxx_personality_v0'
C:/Program Files/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: C:\DxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\4_8_1/libDxUseCLib.a(DxUseCLib.o): bad reloc address 0x5af in section `.eh_frame'
C:/Program Files/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
古いバージョンのcppを読み込む時にでるエラーっぽいです?
バージョンなど
・OS:vista x86
・code::blocks 16.01
ttp://www.codeblocks.org/downloads/26
こちらの codeblocks-16.01mingw-setup.exe です
・MinGWは付属されていて、正確なversionがどこに書いてあるか分からなかったのですが
version 4.9.2だと思います。インストール場所に(CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2)のフォルダがありました
・DXライブラリ(MinGW用) Ver3.17a
今思い出したのですが、DXライブラリの4_9_2_x86_64_w64は64bit向けというのをどこかで見た気がします・・・
とりあえずプロジェクトを貼り付けます
https://www.axfc.net/u/3769240?key=dx
firstTestフォルダの方が4_9_2_x86_64_w64でテストしたものです
testフォルダは4_8_1でテストしたものです
makefileはやはり難しそうですね
GCCをwindows向けに移植したのがMinGWらしいので変わってるのは確かになんだと思います
>みけCATさん
試してみましたが、コンパイルできませんでした
エラーログです
C:\DxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\4_8_1/libDxUseCLib.a(DxUseCLib.o):DxUseCLib.cpp:(.text+0x2fb4): undefined reference to `_Unwind_Resume'
C:\DxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\4_8_1/libDxUseCLib.a(DxUseCLib.o):DxUseCLib.cpp:(.eh_frame+0x5af): undefined reference to `__gxx_personality_v0'
C:/Program Files/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: C:\DxLib_GCC\プロジェクトに追加すべきファイル_GCC(MinGW)用\4_8_1/libDxUseCLib.a(DxUseCLib.o): bad reloc address 0x5af in section `.eh_frame'
C:/Program Files/CodeBlocks/MinGW/bin/../lib/gcc/mingw32/4.9.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
古いバージョンのcppを読み込む時にでるエラーっぽいです?
バージョンなど
・OS:vista x86
・code::blocks 16.01
ttp://www.codeblocks.org/downloads/26
こちらの codeblocks-16.01mingw-setup.exe です
・MinGWは付属されていて、正確なversionがどこに書いてあるか分からなかったのですが
version 4.9.2だと思います。インストール場所に(CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2)のフォルダがありました
・DXライブラリ(MinGW用) Ver3.17a
今思い出したのですが、DXライブラリの4_9_2_x86_64_w64は64bit向けというのをどこかで見た気がします・・・
とりあえずプロジェクトを貼り付けます
https://www.axfc.net/u/3769240?key=dx
firstTestフォルダの方が4_9_2_x86_64_w64でテストしたものです
testフォルダは4_8_1でテストしたものです
Re: code::blocks(MinGW)でのDXライブラリの使い方について
となると、もしかしたらDXライブラリを自分でビルドすると改善するかもしれないですね。
とりあえずエラーが出ているのがlibDxUseCLib.aだけなのでlibDxUseCLib.aだけビルドして公式のものと差し替え、
それでだめなら他のライブラリもビルドする感じで。
とりあえずエラーが出ているのがlibDxUseCLib.aだけなのでlibDxUseCLib.aだけビルドして公式のものと差し替え、
それでだめなら他のライブラリもビルドする感じで。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: code::blocks(MinGW)でのDXライブラリの使い方について
さ迷いましたが、GCC 4.8.1をインストールして、4_8_1を使うことでちゃんとコンパイルできました
>ライブラリのビルド
DXライブラリのビルドは分かりませんでした
フォルダ内にないヘッダなのに見つからないとエラーになったので、見当違いな事をしてるみたいです
DXライブラリのnamespaceを外すのに興味があったので、また今度挑戦してみようと思います
ありがとうございました
>ライブラリのビルド
DXライブラリのビルドは分かりませんでした
フォルダ内にないヘッダなのに見つからないとエラーになったので、見当違いな事をしてるみたいです
DXライブラリのnamespaceを外すのに興味があったので、また今度挑戦してみようと思います
ありがとうございました
Re: code::blocks(MinGW)でのDXライブラリの使い方について
code::blocks とMinGWをいれた積りがGCCぽいしOpenCVとかOpenGLとかFortranとか...
..とにかくめでたしめでたし...
http://csi.nisinippon.com/mingw/
..とにかくめでたしめでたし...
http://csi.nisinippon.com/mingw/
Re: code::blocks(MinGW)でのDXライブラリの使い方について
ほほう、MinGWでDXライブラリを使うときは、バージョンを下げろ、か…。
Re: code::blocks(MinGW)でのDXライブラリの使い方について
MinGW 5.3.0 をインストールしました。環境変数Path[ C:\MinGW\bin ]
D:\w\ps>gcc --version
gcc (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
D:\w\ps>type c1.c
#include <stdio.h>
int main(void)
{
printf("Hello world!n");
return 0;
}
D:\w\ps>gcc c1.c
D:\w\ps>a
Hello world!n
D:\w\ps>dir
ドライブ D のボリューム ラベルがありません。
ボリューム シリアル番号は 343D-00A7 です
D:\w\ps のディレクトリ
2017/01/29 18:48 <DIR> .
2017/01/29 18:48 <DIR> ..
2017/01/29 18:48 60,687 a.exe
2017/01/29 09:41 93 c1.c