我想使用phobos.etc.c.sqlite3绑定.使用C编译器编译sqlite3.c以生成.o文件,然后将其与我的程序链接.
我应该使用哪个C编译器,以及哪些编译器标志?是否可以在一步中将sqlite3.o与DMD链接,而无需单独调用链接器?
或者还有其他更简单的方法吗?
答:如何在64位Ubuntu上使用D进行Sqlite
安装sqlite dev sudo apt-get install libsqlite3-dev
编 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开关
我试图静态链接sqlite3但没有成功.我正在使用'etc.c.sqlite3'标题和sqlite3合并.为了创建.lib文件,我尝试了VC++和MinGW-gcc,这两个文件都成功编译了源文件 - 但它们都生成COFF对象格式(optlink,DMD使用,与OMF一起使用).在阅读了'digitalmars.D'上的大量帖子后,我尝试了几种不同的解决方案.
试图转换用GCC创建的lib文件,导致未定义的符号,如__divdi3和__muldi3,无法解决这个问题.
还尝试将sqlite3.o文件转换为*.obj,然后使用digitalmars'lib.exe' - 也不成功
在VC++生成的lib上尝试objconv失败,原因是:"SQLite.lib是一个导入库"
_sqlite3_open,_sqlite3_errmsg,_sqlite3_close...如果我在VC++创建的库文件上使用coffimplib,程序会生成一个几乎为空的文件(~2KB),它只包含垃圾(即根本没有符号,大多数只是'null'值).
如果我对GCC创建的库执行相同操作,coffimplib会抱怨"不是导入库",并且不会生成转换后的库文件.
如果我使用DMC编译sqlite3合并,则编译失败会抱怨大量错误.所以我在这里,无处可去,有没有人有任何想法或提示可以解决这个问题?
注意:我不想使用DLL,但静态链接sqlite(对于可执行文件大小的问题).