Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用visuald链接到静态库中的包_D_Visual D - Fatal编程技术网

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

如何使用visuald链接到静态库中的包,d,visual-d,D,Visual D,我正在使用VisualD和DMD在VisualStudio2012中编写D 在解决方案资源管理器中,我的解决方案如下所示: ConsoleApp1 (solution name) - codecramlib (a static D library) - - http (folder) - - - package.d - - - request.d - malakai (console project) - - main.d 编解码器库 我的静态D库coderamlib正在自行构建。以下是消息

我正在使用VisualD和DMD在VisualStudio2012中编写D

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

ConsoleApp1 (solution name)
- codecramlib (a static D library)
- - http (folder)
- - - package.d 
- - - request.d
- malakai (console project)
- - main.d
编解码器库 我的静态D库
coderamlib
正在自行构建。以下是消息来源:

d包

module codecramlib.http;

public import request;
请求d

module request;

// temporary filler code
class Request
{
    public int imARequest()
    {
        return 13;
    }
}
当我右键单击
coderamlib
并构建时,我在vs控制台中获得以下输出:

------ Build started: Project: codecramlib, Configuration: Debug Win32 ------
Building Debug\codecramlib.lib...
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
马拉凯(主要项目) 主要问题d:

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

int main(string[] argv)
{
    writeln("Hello D-World!");
    return 0;
}
我通过右键单击
malakai
项目并选择属性>配置属性>编译器>常规并修改“附加导入”字段以读取“./coderamlib”,添加了
coderamlib
作为malakai依赖项。然后单击“应用”和“确定”

在解决方案资源管理器中右键单击
malakai
并单击“构建”时,出现以下错误:

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\\Visual Studio 2012\Projects\ConsoleApp1\coderamlib\http\package.d 3

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

module codecramlib.http;

public import http.request;
这似乎是一个倒退,因为当时不再构建coderamlib库,当我尝试构建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   
错误1错误:来自文件http\request.d的模块请求必须作为模块“request”导入C:\Users\\Visual Studio 2012\Projects\ConsoleApp1\coderamlib\http\package.d 3
错误2错误:模块请求位于无法读取的文件“http\request.d”中C:\Users\\Visual Studio 2012\Projects\ConsoleApp1\coderamlib\http\package.d 3
如何使用VisualD的malakai控制台项目中coderamlib静态库中的coderamlib.http包

编辑 已更正我的文件夹结构,如解决方案资源管理器中所示。我对package.d和request.d的缩进不正确

编辑2
添加了main.d的内容

简单的回答是,您不能导入整个包(d中的文件夹称为包),因此在main.d中应该导入coderamlib.http.request

此外,包不是库,您不能链接它,只能导入模块,这只是将声明从模块添加到本地范围

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

module codecramlib.http;

public import http.request;
coderamlib.http模块

公共导入http.request

通过这样做,您已经将模块http添加到了package coderamlib.http,这是正确的,因为使用公共导入可以通过代码中的一个导入语句导入与模块相关的任何内容,因此在main.d中,您现在可以导入coderamlib.http.htpp,其中第一个http是package,第二个是module,但我不建议将模块命名为与包相同的名称,以避免名称冲突。

本部分

我尝试的第一件事是更改“额外进口”行 致:

/

这似乎有帮助,因为生成错误更改为:错误1错误: 模块请求位于无法读取的文件“request.d”中C:\Users\< 路径已删除>\Visual Studio 2012\Projects\ConsoleApp1\coderamlib\http\package.d3

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

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


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

在我遵照您的建议并向项目依赖项中添加了coderamlib之后,这一点就起到了作用。(右键单击malakai>项目依赖项…>单击coderamlib复选框)