当前位置: 移动技术网 > IT编程>开发语言>.net > 让Sqlite脱离VC++ Runtime独立运行的方法

让Sqlite脱离VC++ Runtime独立运行的方法

2017年12月12日  | 移动技术网IT编程  | 我要评论

广东高校学生砸食堂,健力宝办公系统,明升19119澳门公司

目前手头上的一个.net项目用到了sqlite,这是我第一次接触和使用sqlite,总体感觉还是非常不错的。这里把我使用sqlite的经验跟大家分享一下。

一.关于sqlite  

  sqlite是一款开源的、适合在客户端和嵌入式设备中使用的轻量级数据库,支持标准的sql。

  不像sqlserver或oracle的引擎是一个独立的进程、通过tcp或命名管道等与程序进行通信,sqlite却是作为程序的一个部件、一个构成部分,使用sqlite的方式就是直接在程序中进行api调用。

  原始的sqlite是没有一个向sqlserver企业管理器的可视化操作程序的,但是有个第三方开发的应用sqlitestudio非常不错,基本的建库、建表、编辑数据、导出数据等功能都支持得很好。sqlitestudio运行截图如下所示:

sqlite资源链接:

(1):可以从官网下载源码、或下载已经编译好的二进制版本。支持的系统包括:linux、macos、windows、.net。

(2):好用的sqlite可视化管理器。

二.在.net中使用sqlite

  从官网下载.net版本的sqlite,其主要包括两个dll:sqlite.interop.dll、system.data.sqlite.dll。

(1)system.data.sqlite.dll是一个标准的托管dll,我们可以直接在.net项目中引用并使用它,就像使用.net自带的system.data命名空间中的各个对象一样。

(2)sqlite.interop.dll是一个非托管的dll,是sqlite引擎核心,我们需要将其拷贝到运行目录下,在运行时,它会被system.data.sqlite.dll调用。

三.让sqlite脱离vc++运行时

  我们在项目开发完毕后测试的过程中发现,使用了sqlite的客户端程序在某些机器上运行时会报错,如下所示:

  无法加载 dll"sqlite.interop.dll";由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。(异常来自 hresult:0x800736b1)

  经过一番折腾,才发现是这些机器上没有安装vc++运行时(visual c++ 2005 sp1 runtime),而sqlite.interop.dll的运行是需要vc++运行时支持的。这点太不友好了。我们的项目是基于.net 2.0开发的,windows xp sp1 及以上版本都自带了这个framework,而这些机器不一定安装了vc++运行时。所以我第一反应就是,尝试让sqlite在没有安装vc++运行时的机器上也能正常运行。

1.方案一

  我baidu了一下,有个似乎可行的方案是这样的:将msvcm80.dll、msvcp80.dll、msvcr80.dll这几个动态库也放到运行目录下。这个方案我不太喜欢,于是我尝试自己动手解决问题。

2.方案二

  凭借我还未完全忘记的一点vc++基础,我知道vc++程序在编译时可以选择是动态链接到依赖的库还是静态链接,如果是静态连接,编译生成的二进制程序中就相当于包含了一份依赖库的拷贝。所以,我的想法是,重新编译 sqlite.interop.dll,使其静态链接到vc++运行库。我下载了sqlite的源码,用vs2010打开,截图如下:

     

   sqlite.interop.2010这个项目是核心,我们需要对它的一些设置稍微做些修改,这些小修改我花了一些时间摸索才成功,这里就略去具体的摸索过程,直接给出摸索成果:

(1)打开sqlite.interop.2010项目属性页面,配置属性 -> c/c++ -> 代码生成 -> 运行库,该项设置为 多线程调试 (/mtd)。

(2)继续 配置属性 -> 清单工具 -> 输入和输出 -> 嵌入清单,该项原来是“是”,改成“否”。

(3)显示所有项目文件,然后找到sqlite.interop.2010.props文件,并打开。删掉其中的<interop_mixed_name>配置节点。

(4)从项目中移除“resource files”文件夹。

(5)重新编译项目,生成的sqlite.interop.dll便是我们所需要的。

 四.下载成果

  除非特别需求,否则大家没有必要重复这一过程,我把生成的sqlite二进制版本直接提供给大家下载使用。

补充:sqlite官网已经提供静态连接的库了

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网