问题标签 [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.
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 是否与该问题有关。
d - 我应该确保我的代码同时使用 DMD 和 GDC 编译吗?
我猜想部分等价的问题:使用 DMD 编译的代码是否应该在所有情况下使用 GDC 自动编译?
我问是因为我在从 ubuntu 10.4(看似循环依赖,叹气)存储库安装现代版本的 GDC 时遇到问题。
linker - 如何使用 DMD 编译/链接静态库
每当我使用 DMD 构建静态库时,我都可以将其链接到我的应用程序并且它编译得很好,但是在应用程序中调用该库的任何时候我都会得到:
为了建立我做的图书馆
并用于构建应用程序
我究竟做错了什么?
更新
将 vibe.d 编译为 libvibe.d-dmd.a
示例代码:
编译示例
还有一些 gdb 输出:
d - 实例化 redBlackTree 模板时出错
我在用字符实例化 RedBlackTree 容器时遇到问题,但它适用于整数:
我正在使用 DMD32 D 编译器 v2.060。
有什么想法吗?谢谢。
d - 将 void* 参数数组转换为静态类型
如果我有如下课程:
如何将C
void 指针数组转换为它们各自的类型(其中定义了它们的类型,Parameters
并且长度arguments
等于 的长度Parameters
)然后调用函数?
我尝试使用如下元组来执行此操作:
但这不会编译,因为编译器抱怨“index
在编译时无法读取变量”。有任何想法吗?
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 静态链接(出于可执行文件大小的考虑)。
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 以摆脱无起始地址错误,但无论如何,没有帮助。我需要做什么来消除这最后两个错误?如果我能让它工作,我想我可以查看我需要实现什么来让更多功能工作。但是,如果有人愿意帮助我解决这个问题,那将不胜感激!
d - 无法覆盖结构的 opCmp 和 opEquals
来自 D 的文档:
或者,您可以使用 auto ref 参数声明单个模板化 opEquals 函数:
<...>
如果结构声明一个 opCmp 成员函数,它应该遵循以下形式:
那么为什么下面的代码编译失败呢?
这是 DMD 的输出:
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 之间有什么不同?
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 但具有相同的段错误结果。