如何使用Visual D链接到静态库中的包

时间:2014-08-01 01:46:08

标签: d visual-d

我使用VisualD和DMD在Visual Studio 2012中编写D。

我的解决方案在解决方案资源管理器中如下所示:

ConsoleApp1 (solution name)
- codecramlib (a static D library)
- - http (folder)
- - - package.d 
- - - request.d
- malakai (console project)
- - main.d

codecramlib

我的静态D库codecramlib正在自行构建。这是来源:

package.d

module codecramlib.http;

public import request;

request.d

module request;

// temporary filler code
class Request
{
    public int imARequest()
    {
        return 13;
    }
}

当我右键单击codecramlib并构建时,我在vs console中获得此输出:

------ Build started: Project: codecramlib, Configuration: Debug Win32 ------
Building Debug\codecramlib.lib...
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

malakai(主要项目)

main.d:

import std.stdio;
import codecramlib.http; // also tried import codecramlib;

int main(string[] argv)
{
    writeln("Hello D-World!");
    return 0;
}

我通过右键单击codecramlib项目并选择属性>添加了malakai作为malakai依赖项。配置属性>编译器>一般并修改“附加导入”字段以读取“../codecramlib”。然后我点击“应用”和“确定”。

当我右键单击解决方案资源管理器中的malakai并单击Build时,出现此错误:

Error   1   Error: module http is in file 'codecramlib\http.d' which cannot be read C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\malakai\main.d    2   

故障排除

我尝试的第一件事就是将“其他进口”行更改为:

../

这似乎有帮助,因为构建错误更改为:     错误1错误:模块请求在文件'request.d'中,无法读取C:\ Users \&lt;路径已删除&gt; \ Visual Studio 2012 \ Projects \ ConsoleApp1 \ codecramlib \ http \ package.d 3

为了让编译器识别codecramlib静态库中的request.d,我将package.d更改为:

module codecramlib.http;

public import http.request;

这似乎是一个倒退,因为然后codecramlib库不再构建,当我尝试构建malakai时,我遇到了这些错误:

Error   1   Error: module request from file http\request.d must be imported as module 'request' C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\codecramlib\http\package.d    3   
Error   2   Error: module request is in file 'http\request.d' which cannot be read  C:\Users\< path removed >\Visual Studio 2012\Projects\ConsoleApp1\codecramlib\http\package.d    3   

如何使用Visual D在我的malakai控制台项目中的codecramlib静态库中使用codecramlib.http包?

修改

更正了解决方案资源管理器中显示的文件夹结构。我对package.d和request.d的缩进不正确。

编辑2

添加了main.d的内容

2 个答案:

答案 0 :(得分:1)

这部分

  

我尝试的第一件事是更改“其他进口”行   到:

     

../

     

这似乎有帮助,因为构建错误更改为:错误1错误:   模块请求在文件'request.d'中,无法读取C:\ Users \&lt;   已删除路径&gt; \ Visual Studio   2012 \ Projects \ ConsoleApp1 \ codecramlib \ http \ package.d 3

让我相信这是因为你的请求模块不在codecramlib.http包中,并且因为dmd不知道在/ codecramlib / http /中查找request.d。

我的建议是将“Additional Imports”字段保留为“../”,并将codecramlib / http / request.d中的模块重命名为codecramlib.http.request,然后在codecramlib / http /中更改导入package.d到public import codecramlib.http.request

一般来说,您需要将模块名称与目录布局匹配。

答案 1 :(得分:0)

简单的答案是你不能导入整个包(D称为包中的文件夹),所以在你的main.d中应该导入codecramlib.http.request。

包也不是库,你不能链接它,但只导入模块,只是从模块添加声明到本地范围

  

试图让编译器识别中的request.d   codecramlib静态库,我将package.d更改为:

     

module codecramlib.http;

     

公共导入http.request;

通过这样做你已经将模块http添加到包codecramlib.http,你是正确的,使用公共导入可以导入任何与模块相关的东西,在代码中有一个import语句,所以在main.d中你现在可以导入了codecramlib.http.htpp其中第一个http是包,第二个是模块,但我不建议给模块提供与包相同的名称,以避免名称冲突。