首页 > 解决方案 > package.d 遇到问题

问题描述

我在使用 D 的package.d功能时遇到问题。我有我的package.d文件:

module dew;

public
import dew.util;

然后我有util.d

module dew.util;

struct Size
{
    int width;
    int height;
}

当我尝试在另一个项目中使用它时,它给了我这个错误:错误 我知道这应该可以工作,因为 GitHub 上的项目使用它,特别是bindbc-sdl

标签: packageddub

解决方案


你的代码是正确的。通过错误消息,我假设您的 DUB 项目布局可能看起来像这样:

  • 露/
    • dub.sdl/dub.json
    • 来源/
      • 包.d
      • 实用程序.d

然而,这是不正确的。默认情况下,DUB 仅使用导入文件夹而不是指定所有输入源文件,因此编译器会尝试从文件系统中的导入路径中发现文件。编译器在您的错误屏幕截图中转储了它搜索的导入路径。

相当于它现在正在做的粗略编译器是(参见 参考资料dub -v

dmd source/app.d -Isource -I../dew/source

您需要想象其中写入的路径对编译器是不可见的,因此 dew/source/ 路径只是编译器无法解释的一些不透明字符串。现在编译器在其搜索路径中看到的只是 package.d 和 util.d。但是,对于从文件夹导入功能,它们需要与文件系统布局相对应,即您需要有一个名为dew文件存储位置的文件夹。

所以一个名为的模块dew.util将对应于dew/util.d

你的包裹dew将对应于dew/package.d

因此,对于您的配音项目,这基本上意味着您需要将所有源文件移动到

  • 露/
    • dub.sdl/dub.json
    • 来源/
      • 露/
        • 包.d
        • 实用程序.d

module或者,由于文件顶部的声明,可以逐个手动指定所有文件,编译器可以在其中查找它们,但是您失去了将模块名称映射到文件系统路径的便利,这可能是其他社区制作的 D 源工具和 IDE 所期待的。在命令行上相当于

dmd source/app.d ../dew/source/dew/package.d ../dew/source/dew/util.d

推荐阅读