Windows11编译libtorrent遇LNK1181:无法打开libcrypto.lib
问题描述
Windows11系统,已安装OpenSSL 1.1.1i和Visual Studio 2022,尝试编译从GitHub克隆的libtorrent C++库。在libtorrent源码目录执行b2命令时,返回错误:LINK : fatal error LNK1181: cannot open input file 'libcrypto.lib'。该文件确实存在于C:\Users\Me\openssl目录,且此路径已加入系统PATH,编译过程此前均正常。
操作步骤如下:
set LIB="C:\Users\Me\openssl";%LIB% set INCLUDE="C:\Users\Me\openssl\include";%INCLUDE% set BOOST_ROOT=c:\boost_1_80_0 set BOOST_BUILD_PATH=%BOOST_ROOT%\tools\build cd "C:\Users\Me\libtorrent" b2
执行最后一步返回的错误信息:
...updating 3 targets... msvc.link.dll
bin\msvc-14.3\debug\cxxstd-14-iso\threading-multi\torrent-rasterbar.dll
LINK : fatal error LNK1181: cannot open input file 'libcrypto.lib'call "bin\standalone\msvc\msvc-14.3\msvc-setup.bat" >nul link /NOLOGO /INCREMENTAL:NO
@"bin\msvc-14.3\debug\cxxstd-14-iso\threading-multi\torrent-rasterbar.dll.rsp"
...failed msvc.link.dll
bin\msvc-14.3\debug\cxxstd-14-iso\threading-multi\torrent-rasterbar.dll
bin\msvc-14.3\debug\cxxstd-14-iso\threading-multi\torrent.lib
bin\msvc-14.3\debug\cxxstd-14-iso\threading-multi\torrent-rasterbar.pdb...
...removing
bin\msvc-14.3\debug\cxxstd-14-iso\threading-multi\torrent-rasterbar.pdb
...failed updating 3 targets...
1. 修正环境变量的引号问题
你设置LIB和INCLUDE时加了双引号,这会让系统把带引号的字符串当成完整路径,导致链接器找不到文件。把命令改成:
set LIB=C:\Users\Me\openssl;%LIB% set INCLUDE=C:\Users\Me\openssl\include;%INCLUDE%
2. 匹配OpenSSL与编译架构
VS2022默认编译x64程序,你要确认C:\Users\Me\openssl下的libcrypto.lib是x64版本。如果OpenSSL是32位的,要么重新编译对应架构的OpenSSL,要么给b2加架构参数:
b2 address-model=32
3. 直接给b2指定OpenSSL路径
有时候环境变量不生效,直接在b2命令里指定更稳妥:
b2 openssl-libs=C:\Users\Me\openssl openssl-includes=C:\Users\Me\openssl\include
4. 使用VS开发者命令提示符
确保你是在VS2022自带的开发者命令提示符里执行命令,普通CMD可能没加载VS的编译环境,导致路径识别异常。
内容的提问来源于stack exchange,提问作者nytrate

