静态链接与DMD的SQLite(视窗86)(Statically linking SQLite wi

2019-08-02 22:12发布

我试图用静态链接sqlite3的没有成功。 我使用的是“etc.c.sqlite3”头和sqlite3的融合。 要创建我都试过VC ++和MinGW-GCC的.LIB文件,这两个成功编译源文件 - 但他们都产生COFF对象格式(optlink,其DMD使用,可与OMF)。 在“digitalmars.D”阅读吨的职位后,我已经尝试了几种不同的解决方案。

objconv:

  • 试图转换与GCC创建LIB文件,导致不确定的符号,如__divdi3和__muldi3,没能解决这个问题。

  • 也试过这种转换的sqlite3.o文件* OBJ,然后用digitalmars“LIB.EXE” - 不成功,以及

  • 上产生的LIB一个VC试图objconv失败,因为:“SQLite.lib是导入库”

IMPLIB:

  • 如果我请从sqlite.org和使用IMPLIB预编译的DLL,它生成一个lib文件,但名称重整似乎并不匹配,因为即使我与静态库链接,我仍然收到同样的sqlite的错误(例如未定义符号_sqlite3_open_sqlite3_errmsg_sqlite3_close ...

coffimplib:

  • 如果我使用coffimplib在VC ++创建的库文件,该程序生成一个几乎空文件(〜2KB)只包含垃圾(在所有即没有符号和大多只是“空”值)。

  • 如果我做同样与海湾合作委员会建立图书馆,coffimplib抱怨“不导入库”,并且不产生转换后的库文件。

如果我用DMC编译sqlite3的合并,编译失败抱怨的错误。 所以我在这里,陷在无处,没有任何人有任何意见或建议什么可能解决这个问题?

注意:我不想用一个DLL,但使用SQLite静态链接(可执行文件的大小问题)。

Answer 1:

尝试使用implib/system开关。



Answer 2:

在Windows上你和DLL的更好。 为您节省了许多烦恼。

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

编辑:如果你真的需要静态库,你可以尝试出Unilink的,这是能够链接OMF和COFF文件一起: ftp://ftp.styx.cabel.net/pub/UniLink



Answer 3:

为什么你根本就没有编制,并与您的d应用程序链接SQLite的C代码? 我想这将节省你从图书馆相关的头痛。

当然,一个好的办法是编译DMC SQLite的静态库,并通过简单地做你的d项目中使用它: dmd -of myproggy myproggy.d somefile.d libsqlite.lib



文章来源: Statically linking SQLite with DMD (Windows x86)