Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ubuntu上使用Sqlite in D程序最简单的方法是什么?_Sqlite_D - Fatal编程技术网

在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配合使用

  • 安装sqlite dev
    sudo apt get安装libsqlite3 dev

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

  • 测试d

    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通常不包括第三方库。如果真是这样,那就糟了。它并没有试图替换发行版的包管理器。