静态链接SQLite与DMD(Windows x86)

我试图静态链接与sqlite3没有成功。 我正在使用“etc.c.sqlite3”标题和sqlite3合并。 创build.lib文件我已经尝试了VC ++和MinGW-gcc,它们都能成功编译源文件 – 但是它们都生成COFF对象格式(DMD使用的optlink,可以和OMF一起使用)。 在阅读“digitalmars.D”上的post后,我尝试了几种不同的解决scheme。

objconv:

IMPLIB:

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

coffimplib:

  • 如果我在VC ++创build的库文件上使用coffimplib,程序将生成一个几乎为空的文件(〜2KB),其中只包含垃圾(即根本没有符号,大部分只是'空'值)。

  • 如果我对GCC创build的库做同样的事情,coffimplib会抱怨“不是导入库”,也不会生成转换后的库文件。

如果我使用DMC来编译sqlite3合并,编译失败抱怨大量的错误。 所以在这里,我陷入了困境,有没有人有任何想法或提示什么可以解决这个问题?

注意:我不想使用DLL,但静态链接与SQLite(为可执行文件大小考虑)。

Solutions Collecting From Web of "静态链接SQLite与DMD(Windows x86)"

尝试使用/system开关使用implib

在Windows上,你最好用dll。 为您节省很多头痛。

正在进行的x64支持工作正在进行中,这将利用我认为的COFF + VC的链接器。 这将有希望改变尴尬的局面。

编辑:如果你真的需要静态库,你可以试试Unilink,它可以将OMF和COFF文件链接在一起: ftp : //ftp.styx.cabel.net/pub/UniLink

为什么你只是不编译和链接SQLite C代码与您的D应用程序? 我想这会挽救你从图书馆相关的头痛。

当然,一个好的选择是用DMC编译SQLite静态库,然后在D项目中使用它: dmd -of myproggy myproggy.d somefile.d libsqlite.lib