在 Ubuntu 上使用 D 程序中的 Sqlite 最简单的方法是什么?

发布于 2024-11-19 18:18:05 字数 753 浏览 0 评论 0原文

我想使用 phobos.etc.c.sqlite3 绑定。使用C编译器编译sqlite3.c以生成.o文件,然后将其与我的程序链接。

我应该使用哪个 C 编译器以及什么编译器标志? 是否可以一步将 sqlite3.o 与 DMD 链接起来,而无需单独调用链接器?

或者还有其他更简单的方法吗?

答案:如何在 64 位 Ubuntu 上让 Sqlite 与 D 一起使用

  1. 安装 sqlite dev sudo apt-get install libsqlite3-dev

  2. 编译dmd test.d -L-ldl -L/usr/lib/x86_64-linux-gnu/libsqlite3.a

test.d

import std.stdio, std.string, etc.c.sqlite3;

void main () {
    sqlite3* db;
    auto ret = sqlite3_open (toStringz("mydb.s3db"), &db);
    writeln (ret);
}

-ldl 开关是需要的,因为 sqlite3 链接问题

I suppose using phobos.etc.c.sqlite3 binding. Compiling sqlite3.c using a C compiler to make a .o file and then link it with my program.

Which C compiler should I use, and what compiler flags?
Is it possible link the sqlite3.o with DMD in one step, without calling linker separately?

Or is there some other even easier way?

Answer: How to get Sqlite going with D on 64bit Ubuntu

  1. install sqlite dev sudo apt-get install libsqlite3-dev

  2. compile dmd test.d -L-ldl -L/usr/lib/x86_64-linux-gnu/libsqlite3.a

test.d

import std.stdio, std.string, etc.c.sqlite3;

void main () {
    sqlite3* db;
    auto ret = sqlite3_open (toStringz("mydb.s3db"), &db);
    writeln (ret);
}

-ldl switch was needed because of sqlite3 linking problems

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

墨落画卷 2024-11-26 18:18:05

只要你安装了sqlite3开发包,你就可以调用dmd test.d -L-lsqlite3——不需要绝对路径。

一个不错的替代方案是 lib pragma:

pragma(lib, "sqlite3");

import std.stdio, std.string, etc.c.sqlite3;

void main () {
    sqlite3* db;
    auto ret = sqlite3_open (toStringz("mydb.s3db"), &db);
    writeln (ret);
}

有了它,您就可以直接说 dmd test.d

我无法使用 -ldl 重现您的问题,但也可以将其添加为 pragma 指令。

As long as you have the sqlite3 development package installed, you can just call dmd test.d -L-lsqlite3 -- no need for an absolute path.

A nice alternative is the lib pragma:

pragma(lib, "sqlite3");

import std.stdio, std.string, etc.c.sqlite3;

void main () {
    sqlite3* db;
    auto ret = sqlite3_open (toStringz("mydb.s3db"), &db);
    writeln (ret);
}

With that in place, you can just say dmd test.d.

I can't reproduce your issue with -ldl, but that could also be added as a pragma directive.

梦旅人picnic 2024-11-26 18:18:05

您可以将绑定与可用的 sqlite 库(当然是适当版本的)一起使用,而无需手动将其编译为目标文件。就像您在 C 中所做的那样:您需要 #include 并将 -llibrary 添加到编译器标志中。此处相同 - import 和链接指令。

编辑:

在 Ubuntu 上,您可以使用以下命令安装预编译的 sqlite

sudo apt-get install libsqlite3-dev

另请参阅 http://prowiki.org/wiki4d/wiki.cgi?DatabaseBindings#SQLite 用于其他一些 sqlite 绑定变体。

You can use the binding with an available sqlite library (of an appropriate version, certainly), without having to manually compile it to an object file. Just like what you would have done in C: you'd #include <headers> and add -llibrary to compiler flags. The same here — import, and a link directive.

EDIT:

On Ubuntu you can install precompiled sqlite using the following command:

sudo apt-get install libsqlite3-dev

Also, see http://prowiki.org/wiki4d/wiki.cgi?DatabaseBindings#SQLite for some other sqlite binding variants.

墨落成白 2024-11-26 18:18:05

最新的 phobos 现在包含一个相当最新的 SQLite 绑定。

参见phobos/etc/c/sqlite3.d

Latest phobos contains a quite up-to-date SQLite binding now.

See phobos/etc/c/sqlite3.d

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文