【问题标题】:How do I build a DAllegro project using dub?如何使用 dub 构建 DAllegro 项目?
【发布时间】:2021-11-09 06:21:09
【问题描述】:

我对 D 比较陌生,希望将 allegro 用于图形。我也想用 dub 来构建我的项目。但是,运行后 dub add allegro (https://code.dlang.org/packages/allegro),并尝试编译下面的源代码(使用dub),我得到一个Error: linker exited with status 1。原因? undefined reference to `al_run_main 和 undefined reference to `al_install_system。

示例代码是

import allegro5.allegro;

void main()
{
    al_run_allegro(
    {
        al_init();
        //your code goes here
        return 0;
    });
}

我尝试从我的项目文件夹(复制到 allegro5 文件夹后)和 dub 安装 dallegro 的文件夹中运行 build_lib_dmd.sh,但这没有区别。包中包含的示例可以使用build_example_dmd.sh 成功构建并使用./example 运行。如果我将 allegro5 目录复制到我的项目中,我可以使用 dmd source/app.d allegro5/*.d allegro/internal/*.d 编译我的程序(这是 build_lib_dmd 所做的),但我想使用 dub(并且我不想在我的项目中使用 allegro 库)。

我试过dub add-path allegro5,但什么也没做。我错过了什么?

【问题讨论】:

    标签: d allegro dub


    【解决方案1】:

    看起来你没有链接到 Allegro。 DAllegro5 包只是一个绑定,允许您在 D 中使用 Allegro。您仍然需要与 Allegro 库链接。您可以在dub.json(或dub.sdl)中使用lib 指令链接到任何库。只需确保该库位于您的系统库路径上即可。

    【讨论】:

      【解决方案2】:

      在阅读 dub cli 文档 (https://dub.pm/commandline.html) 时,我发现了 --rdmd 选项,它使 dub 在内部使用 rdmd 而不是 dmd。 正在运行 dub --rdmd 而不是 dub 已解决问题。

      我认为这是因为 dub 内部运行类似dmd -I/path/to/.dub/package source/app.d 的东西,它只链接我使用的函数,而不是包使用的函数。 rdmd 解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-15
        • 2011-06-01
        • 2012-04-30
        • 1970-01-01
        • 2015-12-12
        相关资源
        最近更新 更多