简介
在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文件
.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之分,别搞错了
|