如何在Mac OS X 10.6(雪豹)上开始使用D语言

11

我对"D"技术感兴趣已有几年时间,最近决定开始实际使用它。我很容易掌握了基础知识,喜欢这种语言的基本特性,并且阅读得越多,就越打动我。

现在,我非常想写一个自定义的Web应用程序服务器作为一项兴趣项目,希望它是一个简单的二进制文件,并使用动态链接库来处理实际的Web应用程序。我相信D语言是这个项目的完美选择。

只是有一个大问题...过去几天,我完全无法设置任何IDE,所有可用的IDE都试过了(Code::Blocks、eclipse+descent、带有D插件的Xcode,甚至是运行在Windows XP Pro虚拟机上的windows D-IDE),但是,无论我尝试什么,在命令行上可以编译和运行所有东西,但在IDE中,唯一发生的事情就是:

object.d: Error: module object cannot read file 'object.d'

尝试了两天不同的方法并遵循教程,这真的让我很恼火。我想学习如何高效地使用D语言,但如果我想保持理智,我需要一个舒适的工具链,其中包括编辑器中的代码完成功能。

[编辑:对非常重要的部分进行了强调]

有人能帮我设置eclipse或(最好是)netbeans(但没有公开可用的插件),在我的Mac上运行Mac OS X 10.6,以便在IDE中实现编译和运行能力,以及代码完成吗?

我想使用phobos库(因此需要2.0编译器),但其实我并不在意它是dmd还是gdmd (gdcmac)

[补充]

我相信我们可以假设我的dmd编译器已经安装完毕并正常工作,因为它能够在命令行中运行。我只是不想从命令行中使用它,因为这很繁琐。问题是关于IDE的,编译器是正常工作的,只是IDE不能正常使用。

6个回答

11

我的执着让我无法放弃这个问题,最终我终于解决了它。

在Mac OS X 10.6上使所有组件正常工作所需的组件为:

  • DMD编译器
  • Eclipse "Galileo"(版本3.4)
  • Descent
  • DSSS
  • 更改 /usr/etc/rebuild/default 文件
  • 一个新文件,我把它凑在一起,叫做 /usr/etc/rebuild/macosx.conf
  • Eclipse的全局和每个项目的设置

按照这些说明操作后,您将能够使用Eclipse完成D项目的代码自动补全,并且还可以从IDE中构建/运行。

实际使其运行的步骤如下:

  1. 安装digitalmars dmd 2.0编译器
    1. digitalmars.com下载二进制分发(2.041的直接链接
    2. 将下载的文件解压缩到 ~/somefolder 中(这为我创建了一个 ~/somefolder/dmd2 文件夹,在此示例期间我将使用它。)
    3. 在终端 (/Applications/Utilities/Terminal.app) 中将文件移动到其目标位置
    4. sudo mv ~/somefolder/dmd2/osx/bin/* /usr/bin/ 输入登录密码时输入密码
    5. 将刚复制的 dmd.conf 移动到其位置:sudo mv /usr/bin/dmd.conf /etc/dmd.conf
    6. sudo mv ~/somefolder/dmd2/osx/lib/* /usr/lib/
    7. sudo mv ~/somefolder/dmd2 /usr/
    8. 使用您喜欢的文本编辑器编辑 /etc/dmd.conf,使其包含以下内容:

[Environment]

DFLAGS=-I/usr/dmd2/src/phobos -I/usr/dmd2/src/druntime/import -L-L/usr/lib

  1. http://www.eclipse.org/downloads/中选择并安装您喜欢的Mac OS X版本的Eclipse(我选择了一个用于c/c++的Cocoa版本)
  2. 安装Descent(几乎按照维基百科中的正常说明
    1. 运行Eclipse(不要以root身份运行)
    2. 从菜单栏中选择 Help -> Install New Software (这是什么鬼在 Help 菜单里?!)
    3. http://downloads.dsource.org/projects/descent/update-site 复制/粘贴到url字段中。
    4. 按照屏幕上的说明完成安装。
  3. 从sourceforge安装dsss (.dmg的直接链接)
    1. 像使用其他软件包一样使用磁盘映
      profile=phobos
      compiler=dmd
      inifile=dmd.conf
      exeext=
      objext=o
      version=DigitalMars
      noversion=GNU
      version=MacOSX
      version=linux
      noversion=Unix
      noversion=Posix
      noversion=Windows
      noversion=Win32
      noversion=Win64
      version=X86
      noversion=PPC
      noversion=X86_64
      version=D_InlineAsm
      version=D_InlineAsm_X86
      noversion=D_InlineAsm_PPC
      noversion=D_InlineAsm_X86_64
      version=LittleEndian
      noversion=BigEndian
      
      [compile]
      cmd=dmd -version=MacOSX -c $i
      flag=$i
      incdir=-I$i
      libdir=-L-L$i
      optimize=-O
      version=-version=$i
      
      [link]
      oneatatime=yes
      #cmd=dmd -L-lphobos $i -of$o
      cmd=dmd $i -of$o
      # cmd=dmd -L--start-group -L-lphobos $i -of$o
      
      libdir=-L-L$i
      lib=-L-l$i
      flag=-L$i
      
      [liblink]
      safe=yes
      oneatatime=yes
      cmd=if [ ! -z "$o" ]; then ar rc $o $i; fi
      
      libdir=
      lib=
      flag=
      
      [postliblink]
      cmd=ranlib $i
      
      [shliblink]
      shlibs=no
      
      [dyliblink]
      dylibs=no
      
      1. 更改/usr/etc/rebuild/default文件的内容为:profile=dmd-macosx
      2. 设置Eclipse以具有代码自动补全功能
        1. 在全局Eclipse首选项中导航至D => Build Path => User Libraries
        2. 点击New,输入"std",按OK选择新创建的条目,点击Add Directory
          • 转到/usr/dmd2/src/phobos/std并添加它。
        3. 设置Eclipse项目。 您必须手动为每个D项目执行此操作
        4. 使用"D => D Project"向导创建一个新项目(感谢Descent)
        5. 进入项目属性(右键单击项目资源管理器中的项目,选择属性)
        6. 在左侧列表中选择D Build Path,在出现的面板中选择Include Path选项卡。
        7. 单击Add Library按钮,并在向导的第二页中选择std
        8. 配置外部构建工具
        9. 转到External tools configurations...(从构建/运行/调试工具栏中的绿色播放按钮的下拉菜单中选择)
        10. 在左侧列表中右键单击Program,并从上下文菜单中选择New
        11. 为配置项命名,例如"Build with dsss",并设置以下选项:
          • 位置:/usr/bin/dsss
          • 工作目录:具有项目的dsss.conf文件的完整路径 (如果没有dsss.conf文件,请在命令行上创建一个: dsss genconfig
          • 参数:build(或rebuild,或clean等)
        12. 根据需要重复上面的步骤2和3。

      恭喜,现在应该一切正常。

      如果由于某种原因无法正常工作,请告诉我,我将乐意找出问题所在并帮助您解决。 如果有更好或更简单的方法,我也很乐意知道。


有点难过,我没有得到比这个混乱的回答更好的答案。 - Kris

1
object.d: Error: module object cannot read file 'object.d'

明显表明它无法正确找到库。因此,第一个问题是您的dmd.conf如何设置。您需要确保它指向src / phobos,src / druntime / import和osx / lib的正确位置 - 无论您将它们放在哪里。个人而言,我将dmd代码放在home的子文件夹中,并不尝试在/ usr中安装它,但说明确实告诉您在那里安装它们作为默认值,所以应该可以工作。

假设您的dmd.conf看起来还不错,最有可能的情况是它实际上正在使用错误的dmd.conf。根据digital mars网站上的说明(http://www.digitalmars.com/d/2.0/dmd-osx.html):

dmd will look for the initialization file dmd.conf in the following sequence of directories:

 1. current working directory
 2. directory specified by the HOME environment
 3. variable directory dmd resides in
 4. /etc/

我的猜测是你把dmd.conf放在了/etc目录下并一直在编辑那个文件,但原始的dmd.conf文件却没有动过。

/where_dmd_is/dmd2/osx/bin/

当然,我也遇到过这种情况。无论如何,你需要确保你正在编辑的dmd.conf是dmd正在使用的(因此请确保dmd首先查找的位置没有dmd.conf),并且你需要确保dmd.conf中的路径正确指向dmd的位置。如果这两个条件都正确,那么dmd应该能够正确地找到库。
另外,我想指出的是,考虑到你想要使用共享库,D2目前无法正确使用共享库(我不知道D1是否可以,因为我不使用D1-但我怀疑它们不能)。在D新闻组上已经讨论过这个问题(http://www.digitalmars.com/NewsGroup.html),所以你可以在那里查看。这是一个正在被关注和研究的问题,但还没有完全解决。此外,你可以在新闻组上寻求有关D相关问题的进一步帮助。现在这可能是最好的提问地点。

这些库可能是静态的而不是动态的,所以这不是问题,如果它成为问题,只要给我一个正常工作的环境,我很可能可以解决它。我没有保留原始文件,因为我可以轻松地再次解压它们,在我的系统上只有一个dmd.conf,它在/ etc /中。 sudo find / -name“ dmd.conf” -print告诉我这一点。我再次确信所有路径都设置正确。 - Kris

1

如果您想要快速开始(也就是双击安装): Xcode的D

要求:

  • Xcode

就这些了。它会安装最新的dmd编译器,所以在终端中也可以使用。


现在正在尝试,当我提出这个问题时,找到的适用于Xcode的D语言版本并不起作用,希望现在能够更好。 - Kris
大多数问题和以前一样,代码补全并不真正起作用(只有当前文件中的关键字),没有调试支持(断点不起作用)等等。 - Kris
啊,抱歉,我有点冲动了。是的,缺少适当的调试和完整的代码完成支持。这在“已知问题”中提到过。我有一种感觉,这是当前开发的“边缘”。毕竟,D语言还处于alpha阶段。也许你可以自己贡献这些功能?眨眼 :) - 0scar

1

由于我一直看到这个问题不时地出现在我的搜索结果中,所以我认为我应该让它保持相关性。

现在,在Mountain Lion时代,一个更简单的解决方案存在于Mono-D项目中。

只需安装MonoDevelop(或Xamarin Studio),并按照五分钟安装手册的步骤进行即可。


1

如果是关于IDE的问题,就eclipse而言,我认为需要关注的插件是descent:http://www.dsource.org/projects/descent

不幸的是,我自己还没有尝试过它,所以我不知道它有多好。根据它的维基页面,它主要是为D1设计的,但至少在某种程度上也支持D2。


我已经安装了Eclipse和Descent,以及DSSS。但是标准库(Phobos)中的任何内容都无法进行代码补全,即使编译时间视图和类型浏览器确实可以工作,编译也根本无法工作。我已经查看了维基百科等所有资料,但没有一份指南能让我拥有一个可用的IDE,这就是为什么我在这里提问的原因。 - Kris

0

(你可以在 D 1.0 上使用 Phobos。不管怎样...)

你把 Phobos 和 druntime 的头文件安装在哪里了?

<the .zip file>/src/druntime/
<the .zip file>/src/phobos/

通常我会将它们复制到/usr/include中。

(另外,尝试编辑dmd.conf以使用绝对路径:

[Environment]
DFLAGS=-I/usr/include/phobos -I/usr/include/druntime/import -L-L/usr/lib

)


我已经编辑了dmd.conf文件,将绝对路径添加进去(DFLAGS=-I/usr/dmd2/src/phobos -I/usr/dmd2/src/druntime/import -L-L/usr/dmd2/lib)。我还将二进制文件建立了符号链接到/usr/bin,并将所有与dmd2相关的路径添加到了我的PATH环境变量(bash profile)中,但不幸的是这并没有起到任何作用。 - Kris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接