第三章:win系统下安装D

3.1 要求及下载
3.2 文件
3.3 安装
3.4 示列
3.5 连接
3.6 环境变量
3.7 sc.ini 初始化文件
3.8 常见的安装问题
3.9 Windows 和 Linux 两种版本的区别
3.10 D 接口文件
3.11 建造执行文件
3.12 建造库
3.13 编译 dmd
3.14 编译 Phobos什么?


一:要求及下载

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\dmdcd .. \phobos
make -fwin32.mak DMD = \dmd2\windows\bin\dmd

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

《零基础D编程入门三》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. Directx11 教程(2) 基本的windows应用程序框架(2)
  2. phpmyadmi 上传大文件
  3. Laravel安装因PHP版本不对的bug
  4. [小技巧]EF Core中如何获取上下文中操作过的实体
  5. android serialport new 软件退出_基于Android9.0,了解Android启动流程
  6. OJ1030: 判断直角三角形
  7. 三星Nexus S刷回官方4.0.4教程
  8. windows 编写的脚本 无法在linux下运行
  9. 第二届大数据世界论坛 聚焦行业需求
  10. Zen coding
  11. Java设计模式-单例模式实际应用场景
  12. 鼎新TIPTOP GP/鼎捷易拓ERP系统介绍
  13. 搜狐狐友与腾讯微信两款社交软件的比较
  14. d06调试详细说明_D06调试软件说明
  15. 生活中错误的英文——写错的标语
  16. 5 个免费的受欢迎的 SQLite 管理工具
  17. Jmeter之参数化
  18. 阿里云BaaS下蚂蚁区块链开发实践(二)
  19. 汇编与接口技术课程总结1——汇编程序debug调试
  20. 从零实现 RGB屏幕

热门文章

  1. 【数据结构】机场模拟大程序
  2. win7 开始 菜单 自定义 要显示的最近打开过的程序的数目 是灰色的 不可以更改 怎么解决?
  3. xp系统远程不上服务器,WindowsXP 连接Windows 2003远程桌面 本地打印机 映射不过去 解决办法...
  4. 在宿务航空单独购买姓李额的教程
  5. java 画饼图和图案
  6. Kubernetes-Ubuntu虚拟机安装kubectl,kubeadm,kubelet
  7. 四通道数据采集卡(ADS6445、4 channel、14bit、125MHz)
  8. HDU 6445 Search for Answer(最小费用最大流-mcmf)
  9. 出了新iPhone终于治好了我的选择恐惧症
  10. Mac电脑使用:通过Mac电脑导出iPhone手机里面的照片(不是iTunes导出照片的方法)