0

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

示例代码是

import allegro5.allegro;

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

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

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

4

2 回答 2

2

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

于 2021-09-14T08:44:39.643 回答
0

在阅读 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 解决了这个问题。

于 2021-09-14T14:17:50.397 回答