在Ubuntu上使用Sqlite in D程序最简单的方法是什么?
我假设使用在Ubuntu上使用Sqlite in D程序最简单的方法是什么?,sqlite,d,Sqlite,D,我假设使用phobos.etc.c.sqlite3绑定。使用c编译器编译sqlite3.c以生成.o文件,然后将其与我的程序链接 我应该使用哪个C编译器,以及什么编译器标志? 是否可以在一个步骤中使用DMD链接sqlite3.o,而不单独调用链接器 还是有其他更简单的方法 回答:如何让Sqlite在64位Ubuntu上与D配合使用 安装sqlite devsudo apt get安装libsqlite3 dev 编译dmd test.d-L-ldl-L/usr/lib/x86_64-linux-
phobos.etc.c.sqlite3
绑定。使用c编译器编译sqlite3.c以生成.o文件,然后将其与我的程序链接
我应该使用哪个C编译器,以及什么编译器标志?
是否可以在一个步骤中使用DMD链接sqlite3.o,而不单独调用链接器
还是有其他更简单的方法
回答:如何让Sqlite在64位Ubuntu上与D配合使用
sudo apt get安装libsqlite3 dev
dmd test.d-L-ldl-L/usr/lib/x86_64-linux-gnu/libsqlite3.a
import std.stdio, std.string, etc.c.sqlite3;
void main () {
sqlite3* db;
auto ret = sqlite3_open (toStringz("mydb.s3db"), &db);
writeln (ret);
}
-需要ldl开关是因为您可以将绑定与可用的
sqlite
库(当然是适当的版本)一起使用,而无需手动将其编译为对象文件。就像您在C中所做的那样:您将#包括,并将-llibrary
添加到编译器标志中。此处相同-导入
,以及链接指令
编辑:
在Ubuntu上,您可以使用以下命令安装预编译的sqlite
:
sudo apt-get install libsqlite3-dev
另外,请参阅以了解其他一些sqlite
绑定变体。最新的phobos现在包含一个非常最新的sqlite绑定
请参见phobos/etc/c/sqlite3.d只要安装了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);
}
有了它,您就可以说dmdtest.d
我无法用-ldl
重现您的问题,但也可以将其添加为pragma指令。什么是“可用的sqlite库”?我指的是二进制静态或动态库,可在线()或通过系统的软件包管理器获得。也就是说,如果需要的话,你可以自己编译,也可以不编译,但这并不是最终需要的。我找到的唯一二进制下载是win32 dll。ubuntu也有共享库,但我觉得在D中使用共享库更难(ubuntu包版本也有一年了)。链接到基于C的共享库并不难(创建基于D的共享库是不可能的,但那是另一回事)。我已经更新了答案,请参见:)至于wiki4d上的sqlite绑定。对我来说,这一切似乎都是毫无保留和过时的。我现在知道:)我的问题中提到了这一点。但是我不能在不链接sqlite对象文件的情况下构建可执行文件——dmd发行版中不包含sqlite对象文件。手册还没有提到sqlite,我不知道火卫一中的sqlite支持现在是否只是alpha。。。我应该提交一个不包含sqlite对象文件的bug吗?Phobos永远不会包含sqlite对象文件,就像它将包含pthreads对象文件一样。这些是系统上的共享库。您使用的版本取决于您的系统。Phobos所做的只是向sqlite提供C绑定,这样您就不必自己编写它们了。在某种程度上,它可能也会有一个D包装,这使得在D中使用sqlite更加容易,但Phobos通常不包括第三方库。如果真是这样,那就糟了。它并没有试图替换发行版的包管理器。