问一个小问题
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
共享里好像有人已经上传了 |