CodeBlocks为什么不允许我编译这个示例Allegro程序?

时间:2013-05-24 16:59:11

标签: ide d codeblocks allegro allegro5

基本上我遇到了使用Allegro绑定(D + Allegro)来处理Code:Blocks的问题。 我认为这是一个设置问题,但我不知道在哪里。 所以这就是我到目前为止所做的......

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

这是我一直在犯的错误。我正在使用Windows 7,DAllegro5,代码:Blocks和D语言DMD编译器。

代码:块有效。编译常规D项目有效。我已将DAllegro5文件添加到项目中,但我一直收到此错误。我还应该做些什么才能让这个错误消失?

I followed the instructions here.

  

这里有两种选择。 您可以将所有模块复制到项目中,然后就这样使用它们。或者,为方便起见,您可以将绑定编译到静态库中:

我做了粗体。只是将实际的.d文件复制到我的项目中。

1 个答案:

答案 0 :(得分:1)

“你可以将所有模块复制到你的项目中”路径实际上并不比另一个模块更容易,也就是单独构建库。

无论如何,这是一个对我有用的步骤。请注意,这适用于Windows + Code :: Blocks + Allegro5 + DMD链,假设在Code :: Blocks中编译D项目已经有效。具体来说,这适用于其他D编译器,GDC和LDC。

第一部分

  1. 创建一个Code :: Blocks D项目,删除所有示例D源(如果它们存在)。

  2. 将整个https://github.com/SiegeLord/DAllegro5下载并复制到该项目的目录中,保留目录结构。

  3. 通过导航到Code :: Blocks中的Project - Add files recursively...来递归添加所有.d文件(example.d和allegro5 / *,现在共有49个文件)

  4. 如果您现在构建项目,它会抱怨,如:

    ||=== 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 DLL,可能来自Allegro的主站点,以及一个程序来执行DLL-to-COFF转换,可能来自D编译器的站点。该过程详述如下。

    第二部分

    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

    4. 现在是我们回到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. 重建项目并运行它。现在一切都应该正常工作。

      4. 请告诉我以上所有内容是否适合您 - 如果不是,那么失败的步骤是什么,以及究竟出了什么问题。