我试图与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(对于可执行文件大小的问题)。
答案 0 :(得分:3)
尝试将implib
与/system
切换一起使用。
答案 1 :(得分:1)
在Windows上,你最好使用dll。给你带来很多麻烦。
正在进行x64支持工作,我认为它将利用COFF + VC的链接器。 这有望改变尴尬局面。
编辑:如果你真的需要静态库,你可以尝试Unilink,它可以将OMF和COFF文件链接在一起: ftp://ftp.styx.cabel.net/pub/UniLink
答案 2 :(得分:0)
为什么你根本不编译和链接SQLite C代码与你的D应用程序?我想这样可以避免与图书馆相关的麻烦。
当然,一个很好的选择是使用DMC编译SQLite静态库,并将其与D项目一起使用,只需执行以下操作:dmd -of myproggy myproggy.d somefile.d libsqlite.lib