《零基础D编程入门三》

第三章:win系统下安装D

一:要求及下载

1.下载D编译器
2.32位Windows(Win32)操作系统,如WindowsXP
3.下载Win32版本的dmc.zip(C和C++编译器)(非必要的,它是Windows版的
dmd的补充)(64位相同,我这使用32位系统演示后期更新64位系统安装)

二:文件

\dmd2\src\phobos\:D语言运行库源码
\dmd2\src\dmd\:D编译器前端源码遵从双重证书——GPL和Artistic
\dmd2\html\d\

:文档
\dmd2\samples\d\:D程序示例
\dmd2\windows\bin\dmd.exe:D编译器执行文件
\dmd2\windows\bin\shell.exe:简单命令行shell
\dmd2\windows\bin\sc.ini:全局编译器设置
\dmd2\windows\lib\phobos.lib:D运行库

三:安装

打开控制台窗口(在WindowsXP里,可以通过点击[开始][运行])。所有的工具都是命令行工具,这意味着它们都可以运行在控制台窗口里。切换到根目录。在根目录下解压文件。dmd.zip将会创建目录\dmd2,用于存放压缩包里所有文件。dmc.zip会创建目录\dm,用于存放压缩包里所有文件。
通常的过程看起来就象这样:

C:\DocumentsandSettings\YourName>cd\
C:\>unzipdmd.zip
C:\>unzipdmc.zip

四:示列

\dmd2\windows\bin\shellall.sh

五:连接

在成功编译后,直接由dmd编译器完成连接。想要禁止dmd运行连接器,请使用开关-c。
程序必须跟D运行库phobos.lib连接,同时还有C运行库snn.lib。只要这些库在环境变量LIB所指定的路径里,这个操作会自动完成。设置LIB常用的方式是:

setLIB=\dmd2\lib;\dm\lib

如果使用dmd命令来进行编译然后连接成执行文件,那么它将进行一些仅针对Windows执行文件效的优化。在DLL里不要使用结果.obj文件。要将模块编译成可以在exe或DLL里使用的.obj文件,使用-c进行编译。
使用optlink连接器来完成连接。

六:环境变量

D编译器dmd使用了下列环境变量:DFLAGS:DFLAGS的值等同于在命令行添加给dmd.exe。
LIB:连接器使用LIB来指定搜索库文件的地方。在D中,通常的设置是:

setLIB=\dmd2\lib;\dm\lib

LINKCMD:dmd通常通过寻找link.exe(沿着PATH)来支持连接器。想要使用特定的连接器,则可以通过设置环境变量LINKCMD来达到目的。例如:

set LINKCMD=\dmd\windows\bin\link

PATH:如果在跟dmd.exe所在位置相同的目录里没有找到连接器,那么就到PATH指定的路径里去寻找。注意(Note):其它名叫link.exe的连接器有可能不工作。确保DigitalMarslink.exe是在路径PATH里在其它的link.exe之前第一个被搜索到,或者使用LINKCMD来特别指定使用哪个连接器

七:sc.ini初始化文件

dmd会以下列的目录顺序来寻找初始化文件sc.ini:
        1.当前工作目录
        2.使用环境变量HOME指定的目录
        3.dmd.exe所在的目录
如果找到,在该文件里的环境变更将会覆盖任何已有的设置。这就很轻松使得dmd跟冲突使用了环境变量的程序毫无瓜葛。

八:常见安装问题

•使用Cygwin的unzip工具已知会引起奇怪的问题。
•在Cygwin的命令shell里运行编译器已知会引起问题。在想用Cygwin的shell之间,请尽量确认它可以在标准的Windowsshell——cmd.exe下工作。
•安装dmd和dmc到带有空格的路径里会引起问题。

九:Windows 和 Linux 两种版本的别

在Linux里,字符串文字是只读的。对它们的任何写入都会引起段冲突(segmentviolation)。

十:D接口文件

当处理D源文件中的一个导入模块声明时,编译器会搜索该与该导入模块相对应的D源文件,然后处理该源文件,从中提取所需要的信息。另外,编译器也可以搜索相应的D接口文件。D接口文件仅包含模块导入所需要的信息,而不需要整个模块的实现。使用D接口文件而不是D源文件用于导入模块的好处在于:

              •D接口文件总是要小很多,因此比相应的D源文件有着更快的处理速度。
              •它也可以用于隐藏源代码,例如,人们可以对外提供目标文件库跟D接口文件,而可以不提供完整的源代码。

D接口文件可以由编译器使用开关-H从D源文件创建。D接口文件的扩展名是.di。当编译器处理模块导入声明时,它首先会寻找.diD接口文件,然后才去寻找D源文件。


D接口文件有点类似于C++中的头文件。不过它却不是像C++头文件那必需的,而且它也不是D语言的一部分。它是编译器的一个功能,仅仅是服务于Build过程的优化。

十一:建造执行文件

dmd能够更快地建造可执行文件,如果在命令行输入有尽可能多的源文件的话。在同一次调用dmd时放置多个源文件的更一个好处就是dmd能够完成一定级别的跨模块优化,如跨模块的函数内嵌。

十二:建造库

有三种方式来建造库。例如,假定有foo.d和bar.d需要被编译,而且已经有了目标文件bar.obj以及库文件def.lib,要求将它们全部组合成一个库foo.lib:

1单独编译模块,然后弄成库:

dmd - cfoo.d
dmd - cbar.d
lib - c - p32 foo.lib foo.obj bar.obj abc.obj def.lib
del foo.objbar.obj

2一同编译模块,然后组成库:

dmd - cfoo.dbar.d
lib - c - p32 foo.lib foo.obj bar.obj abc.obj def.lib
del foo.obj bar.obj

3在一步操作里使用dmd来变异和建造库

dmd - lib foo.d ar.d abc.obj def.lib

不会有目标文件写入到磁盘里,所有的操作都在内存里完成。使用-lib还有一个好处就是模块可能被编译成多目标文件,而非恰好是一个模块对应一个目标文件。这样提高了库的粒度,而同时又不必去分裂模块。

十三:编译DMD

cd \dmd2\scr\dmd
make -f win32.mak

十四:编译PHOBOS

cd \dmd2\src\druntime
make -fwin32.mak DMD = \dmd2\windows\bin\dmd

cd .. \phobos
make -fwin32.mak DMD = \dmd2\windows\bin\dmd

注:(基于有完整代码的同时可建造DMD和PHOBOS)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

即刻编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值