code::blocks(MinGW)でのDXライブラリの使い方について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
四角い犬

code::blocks(MinGW)でのDXライブラリの使い方について

#1

投稿記事 by 四角い犬 » 8年前

こんにちわ
C++は2年ほどで、ライブラリの使い方は書いてあるのを真似た経験しかないです

MinGWでcode::blocksというIDEを使ってみたくなり、ただのコンパイルはできたのですが
DXライブラリのリンク?が上手くいかないです

エラーには undefined reference to `DxLib::~' というのがでています
検索してみると、リンカーの順番が間違っている、
makefileというのの中に書く、~.oと~.aの順番が逆になっている等とでました
リンカーの設定はDXライブラリ(MinGW用)の使い方ページからコピペしました
makefileはプロジェクトフォルダ内に見当たらないのと
作るにも初心者には難しく、手間がかかるだけという話もあって躊躇してます

アドバイス等よろしくおねがいします

Math

Re: code::blocks(MinGW)でのDXライブラリの使い方について

#2

投稿記事 by Math » 8年前

私のホームページ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

順番を変えると正常にリンクされないことがありますので、上記の順番通りに入力してください。
-------------------------------------------------------------------------------------------------------
とあってなぜこんなことが必要になるのか。(変わったコンパイラーとしか思えないですね)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: code::blocks(MinGW)でのDXライブラリの使い方について

#3

投稿記事 by みけCAT » 8年前

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両方で以下の設定を行う
  • Compiler settingsタブでの中のOther compiler optionsタブの入力欄にコンパイル時に必要なコンパイルオプションをコピペ
    (参考:もう一度Build Optionsを開いたら#definesの設定に変換されていました)
  • Linker settingsのOther linker optionsにリンク時に必要なオプションをコピペ
  • Search directoriesのCompilerとLinkerにそれぞれ「プロジェクトに追加すべきファイル_GCC(MinGW)用\4_8_1」のパスを追加
使い方のページにあった以下のコードをmain.cppにコピペ(main.cppに元からあった内容は消す)

コード:

#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 ;				// ソフトの終了
}
ツールバーのBuild and runボタンを押す

この手順で、無事プログラムが実行されてフルスクリーンになり、中央に白い点が出ました。

まずはMinGWとcode::blocksとDXライブラリのバージョンを教えてください。
何らかの方法(ユーザー登録したりアップローダーを使うのがめんどくさければ、アーカイブをbase64エンコードなど)でプロジェクトもいただけると、解析して問題点がわかるかもしれません。
添付ファイル
cbtest.zip
プロジェクトファイルおよびコンパイルしたバイナリ
(7.1 MiB) ダウンロード数: 117 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

四角い犬

Re: code::blocks(MinGW)でのDXライブラリの使い方について

#4

投稿記事 by 四角い犬 » 8年前

>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でテストしたものです

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: code::blocks(MinGW)でのDXライブラリの使い方について

#5

投稿記事 by みけCAT » 8年前

となると、もしかしたらDXライブラリを自分でビルドすると改善するかもしれないですね。
とりあえずエラーが出ているのがlibDxUseCLib.aだけなのでlibDxUseCLib.aだけビルドして公式のものと差し替え、
それでだめなら他のライブラリもビルドする感じで。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

四角い犬

Re: code::blocks(MinGW)でのDXライブラリの使い方について

#6

投稿記事 by 四角い犬 » 8年前

さ迷いましたが、GCC 4.8.1をインストールして、4_8_1を使うことでちゃんとコンパイルできました

>ライブラリのビルド
DXライブラリのビルドは分かりませんでした
フォルダ内にないヘッダなのに見つからないとエラーになったので、見当違いな事をしてるみたいです
DXライブラリのnamespaceを外すのに興味があったので、また今度挑戦してみようと思います

ありがとうございました

Math

Re: code::blocks(MinGW)でのDXライブラリの使い方について

#7

投稿記事 by Math » 8年前

code::blocks とMinGWをいれた積りがGCCぽいしOpenCVとかOpenGLとかFortranとか...
..とにかくめでたしめでたし...
http://csi.nisinippon.com/mingw/

keito940
記事: 105
登録日時: 8年前

Re: code::blocks(MinGW)でのDXライブラリの使い方について

#8

投稿記事 by keito940 » 8年前

ほほう、MinGWでDXライブラリを使うときは、バージョンを下げろ、か…。

Math

Re: code::blocks(MinGW)でのDXライブラリの使い方について

#9

投稿記事 by Math » 8年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る