[入门] sqlite3-D需要的sqlite3.lib该如何编译呢?

sinpool 2011-05-16
首先,
https://github.com/bayun/SQLite3-D
这里提供的源代码只有两个:
sqlite3.d和sqlite3_bindings.d
并不包括所需的sqlite3.lib和sqlite3.dll

其次,
我打算从www.sqlite.com下载源代码自己编译出sqlite3.lib和sqlite3.dll。
我参照了这个URL的内容:
http://blog.sina.com.cn/s/blog_5f9b3de40100ic8v.html

我用VC6,
根据www.sqlite.com下载的源代码,
编译出来了sqlite3.lib、sqlite3.dll,
但是,
在使用DMD(2.053)进行编译时,
出现了下面的错误:
D:\dmd_compile\dmd2\windows\bin\..\import\SQLiteForD\sqlite3.lib
Error 43: Not a Valid Library File

问题:
我应该如何编译出SQLite3-D所需的sqlite3.lib和sqlite3.dll呢?

sleets 2011-05-17
dmd使用的omf目标文件格式,msvc使用coff格式,所以不可以直接使用。

coffimplib 可以把coff格式的库转化为omf的库,但是只能转化动态共享库的导出库,也就是说编译后的d程序仍然需要调用msvc的dll文件。

静态coff库转omf库的工具也有,但转后有很多符号不存在,使用起来比较困难。

可以直接使用dmc编译静态omf库,然后给D使用,最后的exe就不依赖dll了。

implib可以直接从dll导出omf格式的库给Dmd使用,这样导出的也是符号库,最后需要dll。


http://www.digitalmars.com/ctg/coffimplib.html
betty_betty2008 2011-05-17
sinpool 写道
首先,
https://github.com/bayun/SQLite3-D
这里提供的源代码只有两个:
sqlite3.d和sqlite3_bindings.d
并不包括所需的sqlite3.lib和sqlite3.dll

其次,
我打算从www.sqlite.com下载源代码自己编译出sqlite3.lib和sqlite3.dll。
我参照了这个URL的内容:
http://blog.sina.com.cn/s/blog_5f9b3de40100ic8v.html

我用VC6,
根据www.sqlite.com下载的源代码,
编译出来了sqlite3.lib、sqlite3.dll,
但是,
在使用DMD(2.053)进行编译时,
出现了下面的错误:
D:\dmd_compile\dmd2\windows\bin\..\import\SQLiteForD\sqlite3.lib
Error 43: Not a Valid Library File

问题:
我应该如何编译出SQLite3-D所需的sqlite3.lib和sqlite3.dll呢?



dll 是通用的,dll for C ?; dll for c++?dll for delphi?? 开玩笑
用implib 将dll 导出for D2 的 lib
implib sqlite3.lib sqlite3.dll
将生成sqlite3.lib

xp 及NT下可能要用上/s 参数:
implib /s sqlite3.lib sqlite3.dll
tomqyp 2011-05-17
或者用dmc把sqlite编译成静态库也很方式
sinpool 2011-05-17
sleets 写道

dmd使用的omf目标文件格式,msvc使用coff格式,所以不可以直接使用。

coffimplib 可以把coff格式的库转化为omf的库,但是只能转化动态共享库的导出库,也就是说编译后的d程序仍然需要调用msvc的dll文件。

静态coff库转omf库的工具也有,但转后有很多符号不存在,使用起来比较困难。

可以直接使用dmc编译静态omf库,然后给D使用,最后的exe就不依赖dll了。

implib可以直接从dll导出omf格式的库给Dmd使用,这样导出的也是符号库,最后需要dll。


http://www.digitalmars.com/ctg/coffimplib.html


tomqyp 写道

或者用dmc把sqlite编译成静态库也很方式


感谢二位给我提供了这么多解决的办法。

betty_betty2008 写道

用implib 将dll 导出for D2 的 lib
implib sqlite3.lib sqlite3.dll
将生成sqlite3.lib

xp 及NT下可能要用上/s 参数:
implib /s sqlite3.lib sqlite3.dll


感谢betty_betty2008告诉我具体的命令格式。

---------------------------------------

我已经成功提取的OMF格式的lib文件了,
并且,betty_betty2008提供的sample代码也成功编译并运行了。
我是下面这样作的:

1、
从www.sqlite.com下载windows的预编译二进制包,
sqlite-dll-win32-x86-3070600.zip(278.49 KiB),
之后,解压缩到目录“sqlite-dll-win32-x86-3070600”中。
URL:http://www.sqlite.com/download.html


2、
从www.digitalmars.com下载implib工具,
在Basic Utilities中。
URL:http://www.digitalmars.com/download/freecompiler.html


3、
在sqlite-dll-win32-x86-3070600目录中,
执行了命令:
implib /s sqlite3.lib sqlite3.dll

Console中出现下面的文字,看来是成功了。
Digital Mars Import Library Manager Version 7.6B1n
Copyright (C) Digital Mars 2000.  All Rights Reserved.
Input is a Windows NT DLL file 'sqlite3.dll'.
Output is a Windows NT import library.
Digital Mars Import Library Creator complete.


hqs7636 2011-05-17
tomqyp 写道
或者用dmc把sqlite编译成静态库也很方式


dmc 怎么编译?把命令行写出来,谢谢
ray_linn 2011-05-17
啥。。。。先用sqlite.dll导出def,然后运行一下lib就好。
tomqyp 2011-05-17
hqs7636 写道

dmc 怎么编译?把命令行写出来,谢谢


命令行比较麻烦,可以看看文档,有个简单的办法。
在codeblock里配一下dmc,新建个静态库把sqlite的文件加进去就行了。
sleets 2011-05-17
dmc编译静态库, 下载sqlite-amalgamation。
dmc -I. -DTHREADSAFE=0 -c sqlite3.c -osqlite3.obj
lib -c sqlite3.lib sqlite3.obj



hqs7636 2011-05-17
还是 sleets 地道,tomqyp 尽整些没用的 

是不是这么整出来的lib不依赖dll了?
Global site tag (gtag.js) - Google Analytics