C++的.dll文件和.lib文件的使用

简介

在VS 中,如果正确使用 .lib 文件和.h 文件的时候,编译是不会报错的,但是项目生成后,必须把 .dll 文件拷贝到输出项目的路径下,否则项目是无法运行的。
值得注意的是.dll 和 .lib 文件都有x86和x64之分,如果这两个环境配错了也会导致无法运行。

示例

在这里以sqlite3示例,官网

  • 下载Source Code下的 sqlite-amalgamation ,里面有.c和.h文件
  • 下载Precompiled Binaries for Windows 下的 sqlite-dll-winXX-xXX,里面有.dll和.def文件
    • 注意,最好是64和86的版本都下载

.def生成.lib 文件

如果你打开.def文件后,你就会发现.def文件里面全是函数名,没有其他东西,这意味着,只通过.def生成的.lib文件是无法运行项目的。
上面下载的文件中没有 .lib 文件但是有.def文件,需要我们手动编译.def文件,编译的.bat脚本如下

@echo off
:: 设置工具的路径目录,这里需要改成自己的lib.exe文件的路径,我的路径和其他人的路径相比不知道为啥这么复杂
SET toolpath=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\
:: 设置def文件的目录
SET defpath=%~dp0%~nx1
echo %toolpath%
echo %defpath%
cd /d "%toolpath%"
:: 转换成x86的,这里要转换成哪个平台就用哪行代码
lib.exe /DEF:%defpath% /machine:IX86 /out:%~dp0%~n1.lib
:: 转换成x64的
::lib.exe /DEF:%defpath% /machine:X64 /out:%~dp0%~n1.lib
pause

然后把 .def 文件拖到这个脚本里面就可以生成 .lib 文件了
还是要强调,.lib文件有x86和x64之分,导错平台会导致编译器报错

环境搭建

在VS中正常创建一个C++控制台项目
然后进行以下配置(右键项目-属性)

  • 需要配置以下内容
    • 在此之前,千万要注意平台是x64还是x86
      在这里插入图片描述
  • 【C/C++】-【常规】-【附加包含目录】,这里配置.h文件的扫描路径,可以使用 ./ 来表示项目路径下
  • 【链接器】-【常规】-【附加库目录】,这里配置.lib文件的扫描路径,可以使用 ./ 来表示项目路径下
  • 【链接器】-【输入】-【附加库依赖项】,这里配置需要调用的.lib文件,例如 sqlite3.lib
    我们把下载和生成好的.lib,.h文件放到工程下(自己可以建一个文件夹),然后配置好上面三个后,就可以调用sqlite3.h里面的方法了。

编写好代码后生成项目,然后你会发现项目是不能运行的,因为还缺一步,需要把.dll 文件拷贝到生成的项目路径下(就是生成的.exe文件所在的位置),这样就可以运行了。
再次提醒,.dll和.lib文件都有x64和x86之分,别搞错了

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值