我试图与 sqlite3 进行静态链接但没有成功。我正在使用“etc.c.sqlite3”标头和 sqlite3 合并。为了创建 .lib 文件,我尝试了 VC++ 和 MinGW-gcc,它们都成功编译了源文件 - 但它们都生成 COFF 对象格式(DMD 使用的 optlink 与 OMF 一起使用)。在阅读了大量关于“digitalmars.D”的帖子后,我尝试了几种不同的解决方案。
尝试转换使用 GCC 创建的 lib 文件,导致未定义的符号,如 __divdi3 和 __muldi3,无法解决此问题。
还尝试将 sqlite3.o 文件转换为 *.obj,然后使用 digitalmars 'lib.exe' - 也不成功
在 VC++ 生成的库上尝试 objconv 失败,因为:“SQLite.lib 是一个导入库”
- 如果我从 sqlite.org 下载预编译的 DLL 并使用 implib,它会生成一个 lib 文件,但名称 mangling 似乎不匹配,因为即使我与静态库链接,我仍然收到相同的 sqlite 错误(例如 undefined符号
_sqlite3_open
,_sqlite3_errmsg
,_sqlite3_close
...
如果我在 VC++ 创建的库文件上使用 coffimlib,程序会生成一个几乎为空的文件 (~2KB),其中只包含垃圾(即根本没有符号,而且大多只是“空”值)。
如果我对 GCC 创建的库执行相同操作,则 coffimlib 会抱怨“不是导入库”并且不会生成转换后的库文件。
如果我使用 DMC 编译 sqlite3 合并,编译失败并抱怨大量错误。所以我在这里,无处可去,有没有人有任何想法或提示可以解决这个问题?
注意:我不想使用 DLL,而是使用 sqlite 静态链接(出于可执行文件大小的考虑)。