相关疑难解决方法(0)

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

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

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

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

答:如何在64位Ubuntu上使用D进行Sqlite

  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);
}
Run Code Online (Sandbox Code Playgroud)

由于sqlite3链接问题,需要-ldl开关

sqlite d

6
推荐指数
2
解决办法
1648
查看次数

静态链接SQLite和DMD(Windows x86)

我试图静态链接sqlite3但没有成功.我正在使用'etc.c.sqlite3'标题和sqlite3合并.为了创建.lib文件,我尝试了VC++和MinGW-gcc,这两个文件都成功编译了源文件 - 但它们都生成COFF对象格式(optlink,DMD使用,与OMF一起使用).在阅读了'digitalmars.D'上的大量帖子后,我尝试了几种不同的解决方案.

objconv:

  • 试图转换用GCC创建的lib文件,导致未定义的符号,如__divdi3和__muldi3,无法解决这个问题.

  • 还尝试将sqlite3.o文件转换为*.obj,然后使用digitalmars'lib.exe' - 也不成功

  • 在VC++生成的lib上尝试objconv失败,原因是:"SQLite.lib是一个导入库"

IMPLIB:

  • 如果我从sqlite.org下载预编译的DLL并使用implib,它会生成一个lib文件,但名称mangling似乎不匹配,因为即使我链接到静态库,我仍然会收到相同的sqlite错误(例如undefined符号_sqlite3_open,_sqlite3_errmsg,_sqlite3_close...

coffimplib:

  • 如果我在VC++创建的库文件上使用coffimplib,程序会生成一个几乎为空的文件(~2KB),它只包含垃圾(即根本没有符号,大多数只是'null'值).

  • 如果我对GCC创建的库执行相同操作,coffimplib会抱怨"不是导入库",并且不会生成转换后的库文件.

如果我使用DMC编译sqlite3合并,则编译失败会抱怨大量错误.所以我在这里,无处可去,有没有人有任何想法或提示可以解决这个问题?

注意:我不想使用DLL,但静态链接sqlite(对于可执行文件大小的问题).

windows sqlite d dmd

5
推荐指数
1
解决办法
929
查看次数

标签 统计

d ×2

sqlite ×2

dmd ×1

windows ×1