VisualD。使用外部.lib

时间:2014-02-02 22:09:41

标签: visual-studio-2012 windows-7 d

我正在Visual D下开发一个项目。在解决方案中,我有一个库项目和一个可执行项目。问题是如何在可执行项目中链接库项目(从那里使用模块)?

我尝试在项目设置中添加库搜索路径但是没有生效,编译器仍然写错了:

Error: module TestObject is in file 'Library\Core\TestObject.d' which cannot be read    D:\dev\projects\d\MySolution\Executable\main.d

更新1 经过一些实验,我发现问题在于编译器链接器。我安装了Xamarin Studio,添加了lib和可执行项目,检查了lib项目作为exectutable项目的依赖项,Xamarin Studio发现了(!!!)模块和来自lib项目的命名空间,但是编译器仍然写了那个愚蠢的错误。在Xamarin构建日志中存在lib二进制文件的完整限定路径。 (供参考,我使用的是Windows 7 x86)

更新2 我将项目推送到GitHub,如果你想尝试编译它 - 欢迎你。

更新3 我已经在新的Ubuntu 13.10上测试了MonoDevelop中的编译,但仍然存在错误。我认为这可能是我的文件结构或项目结构的问题......

3 个答案:

答案 0 :(得分:2)

您需要一个.d文件,其中包含所有函数原型和类型,如C头文件。在该文件中,您可以添加一行pragma(lib, "TestObject");来告诉编译器它需要与该模块链接。我相信在标准的-I导入路径中搜索模块,因此请尝试在那里添加模块路径。

答案 1 :(得分:2)

如果我理解正确,你在解决方案中有两个项目,并希望exe项目自动链接到lib项目?您只需在解决方案查看器中右键单击exe项目,然后将lib添加为Build Dependancy。

答案 2 :(得分:0)

我发现问题在于文件结构。出于某些奇怪的原因,在D中,您无法创建具有相同模块名称的嵌套项目,如

核心\ MyClass.d:

module Core.MyClass;

class MyClass {
    //some stuff
}

然后使用它:

import Core.MyClass;

因为当你链接一个lib时,它的命名空间将在你的全局命名空间中混合,但是不会遵循模块结构。将遵循模块结构的文件结构。这发生在所有编译器( dmd dmd2 ldc2 gdc )上。这很奇怪,因为 C# ActionScript 允许这样做,这是正常的逻辑。任何想法如何组织如下的结构?

import Root.Sub.Target;