问题标签 [dmd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
473 浏览

macos - 无法在 OS X 10.6.8 上安装 DMD 2.060

我计划在我的生命中第一次尝试 D。我有一台运行 OS X 10.6.8 (Snow Leopard) 的 MacBook Pro。

我进入 D 下载页面并单击 OS X 的 dmd 2.060 安装程序的链接。我打开它并双击其中的“DMD2.pkg”文件。安装程序提出了一些文本,其中包括一行“此软件包仅适用于 Mac OS X Leopard (10.5)。”。我试图找到 OS X 10.6 的版本,但找不到,所以我忽略了警告并单击“继续”。

我点击了协议和问题,然后当它完成时,安装程​​序给出了以下消息:

安装失败。安装程序遇到导致安装失败的错误。请联系软件制造商寻求帮助。

论坛上有人建议在尝试安装 D 时运行控制台应用程序。我尝试过并收到以下消息:

我在 digitalmars.D.learn 论坛上问过这个问题。我不确定这是否是最合适的论坛,但我把它放在那里是因为我刚刚开始学习。我还在他们的跟踪器上提交了错误报告。您可以在 digitalmars.D.bugs 上查看错误报告自动生成的帖子,但尚未收到任何回复。

有人建议使用名为 DVM 的第 3 方程序,但我对此感到有点不情愿。我不明白为什么我必须安装第 3 方程序,在文档或下载页面 AFAIK 的任何地方都没有提到,只是为了安装编译器。

有谁知道为什么会发生这种情况或我应该怎么做?

编辑:有人在评论中提到了“vpnclient”。我曾经为我以前的工作安装过 Cisco VPNClient。但是,我已经一年多没有使用它了,至少几个月前我删除了它。我不记得哪个版本的详细信息,但是如果有人需要知道,我可以尝试在下次我可以访问我的家用计算机时推断出这一点。

编辑2:上述评论部分错误。我的计算机上仍然有 Cisco VPNClient 4.9.01.0180,尽管我已经一年多没有使用它了。

编辑 3:我尝试删除 VPNClient,但我仍然遇到同样的问题。我仍然不确定 VPNClient 是否与该问题有关。

0 投票
1 回答
324 浏览

d - 我应该确保我的代码同时使用 DMD 和 GDC 编译吗?

我猜想部分等价的问题:使用 DMD 编译的代码是否应该在所有情况下使用 GDC 自动编译?

我问是因为我在从 ubuntu 10.4(看似循环依赖,叹气)存储库安装现代版本的 GDC 时遇到问题。

0 投票
1 回答
2193 浏览

linker - 如何使用 DMD 编译/链接静态库

每当我使用 DMD 构建静态库时,我都可以将其链接到我的应用程序并且它编译得很好,但是在应用程序中调用该库的任何时候我都会得到:

为了建立我做的图书馆

并用于构建应用程序

我究竟做错了什么?


更新

将 vibe.d 编译为 libvibe.d-dmd.a

示例代码:

编译示例

还有一些 gdb 输出:

0 投票
1 回答
123 浏览

d - 实例化 redBlackTree 模板时出错

我在用字符实例化 RedBlackTree 容器时遇到问题,但它适用于整数:

我正在使用 DMD32 D 编译器 v2.060。

有什么想法吗?谢谢。

0 投票
1 回答
121 浏览

d - 将 void* 参数数组转换为静态类型

如果我有如下课程:

如何将Cvoid 指针数组转换为它们各自的类型(其中定义了它们的类型,Parameters并且长度arguments等于 的长度Parameters)然后调用函数?

我尝试使用如下元组来执行此操作:

但这不会编译,因为编译器抱怨“index在编译时无法读取变量”。有任何想法吗?

0 投票
3 回答
1025 浏览

windows - 静态链接 SQLite 与 DMD (Windows x86)

我试图与 sqlite3 进行静态链接但没有成功。我正在使用“etc.c.sqlite3”标头和 sqlite3 合并。为了创建 .lib 文件,我尝试了 VC++ 和 MinGW-gcc,它们都成功编译了源文件 - 但它们都生成 COFF 对象格式(DMD 使用的 optlink 与 OMF 一起使用)。在阅读了大量关于“digitalmars.D”的帖子后,我尝试了几种不同的解决方案。

对象转换:

  • 尝试转换使用 GCC 创建的 lib 文件,导致未定义的符号,如 __divdi3 和 __muldi3,无法解决此问题。

  • 还尝试将 sqlite3.o 文件转换为 *.obj,然后使用 digitalmars 'lib.exe' - 也不成功

  • 在 VC++ 生成的库上尝试 objconv 失败,因为:“SQLite.lib 是一个导入库”

暗示:

  • 如果我从 sqlite.org 下载预编译的 DLL 并使用 implib,它会生成一个 lib 文件,但名称 mangling 似乎不匹配,因为即使我与静态库链接,我仍然收到相同的 sqlite 错误(例如 undefined符号_sqlite3_open, _sqlite3_errmsg, _sqlite3_close...

咖啡机库:

  • 如果我在 VC++ 创建的库文件上使用 coffimlib,程序会生成一个几乎为空的文件 (~2KB),其中只包含垃圾(即根本没有符号,而且大多只是“空”值)。

  • 如果我对 GCC 创建的库执行相同操作,则 coffimlib 会抱怨“不是导入库”并且不会生成转换后的库文件。

如果我使用 DMC 编译 sqlite3 合并,编译失败并抱怨大量错误。所以我在这里,无处可去,有没有人有任何想法或提示可以解决这个问题?

注意:我不想使用 DLL,而是使用 sqlite 静态链接(出于可执行文件大小的考虑)。

0 投票
2 回答
1465 浏览

d - 如何在没有 D 运行时编译 D 应用程序?

我一直试图永远解决这个问题,它开始让我烦恼。我了解 D 运行时库。它是什么,它做什么。我也明白你可以在没有它的情况下编译一个 D 应用程序。就像 XoMB 所做的那样。好吧,XoMB 定义了它自己的运行时,但在某些情况下,如果你不需要它,你就不需要编写自己的运行时。我知道我正在使用的 DigitalMars D 编译器 (dmd) 在运行时在幕后做了很多事情,比如根据程序所需的内容发出对某些事情的引用。而且,每个程序的东西。所以你必须自己定义这些。我决定尝试一下,试着自己弄清楚,然后走得很远。我的意思是让链接器吐出越来越少的错误。对于测试,我只想编译一个完整的准系统应用程序,只是为了让事情在没有运行时的情况下工作。或者尽可能少的运行时间。这是我的单一源文件。

我编译: dmd -c main.d -defaultlib=

然后链接:link main.obj

这是我得到的错误: OPTLINK : 警告 23: No Stack & OPTLINK: Warning 134: No Start Address

您可以看到我尝试将chainng main 连接到_main 以摆脱无起始地址错误,但无论如何,没有帮助。我需要做什么来消除这最后两个错误?如果我能让它工作,我想我可以查看我需要实现什么来让更多功能工作。但是,如果有人愿意帮助我解决这个问题,那将不胜感激!

0 投票
1 回答
302 浏览

d - 无法覆盖结构的 opCmp 和 opEquals

来自 D 的文档

或者,您可以使用 auto ref 参数声明单个模板化 opEquals 函数:

<...>

如果结构声明一个 opCmp 成员函数,它应该遵循以下形式:

那么为什么下面的代码编译失败呢?

这是 DMD 的输出:

0 投票
1 回答
1459 浏览

debugging - 在 GDC 和 DMD 之间进行选择

我是 D 编程新手。选择 DMD(2.061)或 GDC(4.6、4.7 或 4.8,快照)的优缺点是什么。我应该选择哪个 GDC 版本?我已经成功构建了 GCC-4.8 和 GDC-4.8 的最新快照,它编译了一个 hello world 程序。

以下是我目前对职业选手的看法:

  • GDC:更多平台,运行时性能
  • DMD:编译性能,更多测试?

通过 GDB 的调试支持怎么样 - GDC 和 DMD 之间有什么不同?

0 投票
1 回答
543 浏览

gcc - DMD 在带有强化 GCC 的 Ubuntu 12.10 64 位上生成可执行段错误

我在让 DMD 2.061 处理我的 Ubuntu 12.10 配置时遇到问题。

当我第一次使用以下脚本安装它时

一切正常。

但...

然后突然在我从一些 Ubuntu PPA 安装了我最喜欢的软件后,代码dmd 会生成段错误。由于我使用了很多额外的 PPA,因此要找出导致崩溃的 PPA 并不容易。我已经在默认(未修改)用户上尝试过这个。

具体命令

其中f.d包含

崩溃为

接下来我尝试比较 dmd 使用的所有动态库的 sha1sum,然后是我的程序:

到我的电视系统上默认安装的没有额外 PPA 的那些。

事实证明,情况/usr/lib/x86_64-linux-gnu/libstdc++.so.6有所/lib/x86_64-linux-gnu/libgcc_s.so.1不同。

然后我将这些文件复制到我的原始系统并使用

LD_PRELOAD=libstdc++.so.6:libgcc_s.so.1

但是......我仍然得到同样的段错误......我迷路了。否则到底是什么导致了这个问题?我应该开始比较 dmd 和我的程序读取的文件(由 strace 收集)吗?

我的系统与 gcc、g++ 一起在其他地方工作。所以我发布这个是希望我的配置可能发现了从 DMD 生成的代码中的一个漏洞。

最后,我在失败的系统上打印一些关于编译器版本的默认值

在我的工作中(没有额外 PPA 的 Ubuntu 12.10)

根据gdb rdmd运行f.d它崩溃gc_init()

我终于尝试从源代码构建 dmd 但具有相同的段错误结果。