问一个小问题

codekitten 2007-06-13
请问一下,我如果想使用别人开发的D语言的库,该怎么做呢?在C/C++中可以包含.h文件和.lib文件,在D语言中有.lib文件,但是没有.h文件,那它的.h文件是不是就是源文件呢?
tomqyp 2007-06-13
D没有头文件这一说,它的申明和定义都在一起,要用别人的库,除了引用源文件,编译的时候把它的Llb文件路径加进去就行了,最好的办法是你去试试dfl、ddbi这些库就知道了
codekitten 2007-06-13
那就是说D语言开发的东西一定是开源的咯?我总觉得这个解决方法不是太好,不过也没有其他的办法了.
我认为D语言应该有自己的管理机制才好
tomqyp 2007-06-13
不一定非要开源哪,也可以用C的方法分开定义的

http://dlang.group.iteye.com/group/topic/1279
qiezi 2007-06-13
实际上现在就差一个编译器选项,生成只有接口的文件,现在di文件还是包括实现代码,不过如果有lib文件,D编译器根本不需要看这部分实现代码,可能模板例外点。

比如一个库文件:
module foo;

import std.string;

class Foo
{
private:
	int a;
	char[] b;

public:
	this(int a, char[] b)
	{
		this.a = a;
		this.b = b;
	}

	char[] c(char[] prefix)
	{
		return prefix ~ b ~ .toString(a);
	}

	char[] d(int a)
	{
		return b ~ .toString(a);
	}
}

编译为foo.o或foo.obj文件以后,各种类型信息已经在输出文件中了,这时候只需要符号而已。

只需要提供一个foo.di文件和.lib/.dll/.a/.so文件:
module foo;

class Foo
{
    public:
    this(int a, char[] b);
    char[] c(char[] prefix);
    char[] d(int a);
}

它不需要包含私有成员和非虚函数,只需要包括public成员和虚函数就行可以,不过目前编译器没有实现这个选项。
codekitten 2007-06-13
那请问一下,如何将程序编译成.lib文件啊,在DMD的文件夹中有两个子文件夹,一个是dm,一个是dmd,dmd中有编译D语言的相关程序,而dm中也有一个lib.exe和make.exe,我如果就用DMD提供的这两个子文件夹编译程序的话,根本编译不过,后来上网查说是需要DMC的一套东西,结果我下载了DMC的编译器,替换了子文件夹dm,控制台程序可以编译通过了,但是还不能编译成.lib,说什么找不到文件,我用的平台是CodeBlocks,这到底是什么回事啊?
codekitten 2007-06-13
它的错误是:
Linking static library: Test.lib
Digital Mars Librarian Version 8.02n
Copyright (C) Digital Mars 2000-2007 All Rights Reserved
http://www.digitalmars.com/ctg/lib.html
Error: Test.lib : No such file or directory
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

tomqyp 2007-06-13
dmd -lib -of要输出的文件名.lib
codekitten 2007-06-13
dmd没有-lib这个选项啊
tomqyp 2007-06-13
错了 我用的是个build工具 bud -lib
共享里好像有人已经上传了
Global site tag (gtag.js) - Google Analytics