gpt4 book ai didi

external - 在 D 中使用外部库

转载 作者:行者123 更新时间:2023-12-01 21:13:19 38 4
gpt4 key购买 nike

我在 Linux 上有一个 DMD + Tango bundle 。请给我一步一步的信息,我如何在 D 中使用外部库,例如 zlib。我已经编译了zlib。

我有一个像这样的文件树:

myzlib
├── include
│   ├── zconf.h
│   └── zlib.h
└── lib
└── libz.a

我的 myfile.d 源代码中有 import tango.io.compress.ZlibStream; 调用。

这些是我的问题:

  1. 我需要将这些文件复制到 dmd/lib 目录吗?
  2. 我需要修改 dmd/bin/dmd.conf 文件吗?
  3. 我应该如何调用dmd编译器(dmd myfile.d -Llibz.a)或其他东西(也许,使用绝对路径)?

我从未尝试过使用任何其他语言的外部库。请帮助我。

最佳答案

-L 标志告诉链接器将特定目录添加到其搜索路径。

-l 告诉它链接到特定的库,并在其搜索路径上搜索以查找该库。

使用 DMD,您必须使用 -L 标志将标志传递给链接器。它可以采用绝对路径或相对路径,但路径需要相对于编译器的运行位置。因此,如果您使用相对路径,那么您始终必须从同一目录运行编译器(这通常不是问题,因为您通常在 Makefile 中包含构建命令)您始终从同一目录运行)。

最常见的是对系统上安装的库使用绝对路径,对特定于项目的库使用相对路径。

因此,如果您有库 myzlib/lib/libz.a,您可以将 -L-Lmyzlib/lib -L-lz 传递给 dmd

然后,它会将 myzlib/lib 添加到链接器的搜索路径,然后在其搜索路径中查找 libz.a(链接器知道要采取-l后面的部分,在其前面添加lib,并在末尾添加.a后缀即可获取您要查找的库) .

可以将链接器标志添加到dmd.conf,但我真的不建议这样做。 dmd.conf 中的标志是 dmd 始终每个程序使用的标志。因此,您实际上应该只拥有所有程序中使用的标志。

相反,直接将它们提供给 dmd(无论是在命令行上还是作为 Makefile 的一部分)。

对于头文件,您需要在 .d 文件中复制所需的任何声明。

头文件由 C 或 C++ 编译器使用,而不是链接器使用。 D 与 C 或 C++ 共享相同的链接器,但其编译器是 dmd,而不是 gcc。

因此,您需要在 D 文件中复制 C 声明。最简单的方法是使用 htod utility ,但它仅适用于 Windows 或 Wine。

无论如何,您需要在 .d 文件中声明要使用的 C 声明,并用 extern(C) 标记它们。

关于external - 在 D 中使用外部库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5054833/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com