[入门] 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了? |