1

基本的に、Allegro バインディング (D + Allegro) を Code:Blocks で動作させるのに問題があります。設定の問題だと思いますが、どこが悪いのかわかりません。だからここに私がこれまでにやったことがあります...

Error: module base is in file 'allegro5\base.d' which cannot be read|

これは私が取得し続けるエラーです。Windows 7、DAllegro5、Code:Blocks、および D 言語の DMD コンパイラを使用しています。

Code:Blocks は動作します。通常の D プロジェクトのコンパイルは機能します。プロジェクトに DAlegro5 ファイルを追加しましたが、このエラーが発生し続けます。このエラーを解消するには、他に何をすればよいですか?

こちらの指示に従いました。

ここには 2 つのオプションがあります。すべてのモジュールをプロジェクトにコピーして、そのように使用できます。または、便宜上、バインドを静的ライブラリにコンパイルすることもできます。

太字にしました。実際の .d ファイルをプロジェクトにコピーしただけです。

4

1 に答える 1

1

実際、「すべてのモジュールをプロジェクトにコピーできる」パスは、ライブラリを個別にビルドするという代替パスよりも簡単ではありません。

とにかく、ここに私のために働いたステップバイステップがあります. これは、Windows + Code::Blocks + Allegro5 + DMD チェーンに適用されることに注意してください。これは、Code::Blocks での D プロジェクトのコンパイルが既に機能していることを前提としています。特に、これは他の D コンパイラ、GDC および LDC には適用されません。

パートI

  1. Code::Blocks D プロジェクトを作成し、存在する場合はすべてのサンプル D ソースを削除します。

  2. https://github.com/SiegeLord/DAllegro5全体をダウンロードしてそのプロジェクトのディレクトリにコピーし、ディレクトリ構造を維持します。

  3. ProjectCode::Blocks 内の-に移動して、すべての .d ファイルを再帰的に追加しますAdd files recursively...(example.d と allegro5/*、現在は合計 49 ファイルでした)。

ここでプロジェクトをビルドすると、次のようにエラーが表示されます。

||=== Build: Debug in [your-project-name] (compiler: Digital Mars D Compiler) ===| || Symbol Undefined _al_run_main| || Symbol Undefined _al_install_mouse| || Symbol Undefined _al_draw_triangle| ... ||=== Build failed: 26 error(s), 0 warning(s) (0 minute(s), 6 second(s)) ===|

つまり、リンカーはライブラリ関数を見つけることができません。ここで問題があります。COFF .lib 形式の Allegro5 バイナリを取得する必要があります。そして、私が知る限り、信頼できる場所にあるとは限りません。Allegro 開発者が提供する .lib バイナリは OMF 形式です。これを入手するには、おそらく Allegro のメイン サイトから入手できる Allegro DLL と、おそらく D コンパイラのサイトから入手できる DLL から COFF への変換を実行するプログラムが必要です。プロセスの詳細は以下のとおりです。

パート II

  1. Allegro5 DLL を入手するには、https: //www.allegro.cc/files/ にアクセスしてバイナリをダウンロードします。

  2. コンバーターを入手するには、DigitalMars から implib.exe を入手します。たとえば、http://www.digitalmars.com/download/freecompiler.htmlに移動し、そこから基本的なユーティリティをダウンロードします (リンクはhttp://ftp.digitalmars.com/bup.zipです)。

  3. 最も簡単な方法は、すべてのライブラリ関数を含む単一の Allegro5 DLL を取得することです (allegro-*.dll、allegro_font-*.dll、allegro_primitives-*.dll などのモジュールを個別に使用するのではなく)。のようなコマンドを実行するimplib /s dallegro5.lib allegro-5.0.10-monolith-mt.dllと、既存の DLL ファイルから COFF 形式の .lib ファイルが生成されます。ここで、関数名の前にアンダースコアを追加するために「/s」オプションが必要です。たとえば、「al_run_main」は .lib ファイルでは「_al_run_main」と呼ばれます。Allegro5 DLL ファイルの命名 (monolith、md、mt など) については、https ://www.allegro.cc/manual/5/install/windows.html で説明されています。

Code::Blocks プロジェクトに戻りましょう。

パート III

  1. DLL (allegro-5.0.10-monolith-mt.dll) と lib (dallegro5.lib) の両方を Code::Blocks プロジェクト ディレクトリのルートにコピーします。少しごちゃごちゃしていますが、後で作業用の構成ができたら、より適切な場所に移動できます。

  2. Code::Blocks でProject- Build options...-に移動しLinker settings、新しく作成した "dallegro5.lib" をライブラリのリストに追加します。

  3. プロジェクトを再ビルドして実行します。すべてが機能するはずです。

上記のすべてがうまくいったかどうかを教えてください。そうでない場合は、失敗したステップは何か、何がうまくいかなかったのかを教えてください。

于 2014-02-28T21:54:48.313 に答える