如何解决OpenCV CUDA支持编译时LNK1181找不到x64.lib的问题
问题场景
尝试编译带CUDA支持的OpenCV,先后更换Visual Studio 2019/2022编译工具链、Ninja构建器,以及不同版本的OpenCV源码,均出现相同的链接阶段错误,错误信息如下:
FAILED: bin/opencv_world490.dll lib/opencv_world490.lib
C:\windows\system32\cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E vs_link_dll --intdir=modules\world\CMakeFiles\opencv_world.dir --rc=C:\PROGRA2\WI3CF21\10\bin\100226~1.0\x64\rc.exe --mt=C:\PROGRA2\WI3CF21\10\bin\100226~1.0\x64\mt.exe --manifests -- C:\PROGRA1\MIB0551\2022\PROFES1\VC\Tools\MSVC\14381.331\bin\Hostx64\x64\link.exe /nologo @CMakeFiles\opencv_world.rsp /out:bin\opencv_world490.dll /implib:lib\opencv_world490.lib /pdb:bin\opencv_world490.pdb /dll /version:4.9 /machine:x64 /INCREMENTAL:NO /NODEFAULTLIB:libc /DEBUG && cd ."
LINK: command "C:\PROGRA1\MIB0551\2022\PROFES1\VC\Tools\MSVC\14381.331\bin\Hostx64\x64\link.exe /nologo @CMakeFiles\opencv_world.rsp /out:bin\opencv_world490.dll /implib:lib\opencv_world490.lib /pdb:bin\opencv_world490.pdb /dll /version:4.9 /machine:x64 /INCREMENTAL:NO /NODEFAULTLIB:libc /DEBUG /MANIFEST:EMBED,ID=2" failed (exit code 1181) with the following output:
LINK : fatal error LNK1181: cannot open input file 'x64.lib'
解决步骤
1. 修正CMake的CUDA架构配置
这个错误通常是CMake错误地将CUDA架构参数解析为链接器的输入库文件。正确的做法是:
- 不要在
CMAKE_CXX_FLAGS或CUDA_NVCC_FLAGS中手动添加x64这类平台标识 - 使用CMake标准变量
CMAKE_CUDA_ARCHITECTURES指定目标GPU架构,例如86对应RTX 30/40系列、75对应RTX 20系列、61对应GTX 10系列
2. 清理缓存后重新配置
- 删除编译目录下的
CMakeCache.txt文件,以及所有自动生成的构建文件 - 重新运行CMake配置命令,确保所有CUDA相关参数设置正确,避免将架构参数误传入链接器
3. 检查链接器响应文件
打开CMakeFiles\opencv_world.rsp文件,查看其中是否错误包含了x64作为库引用。如果存在,回溯对应的CMake配置项,修正参数传递逻辑
4. 验证CUDA Toolkit路径
确认CUDA Toolkit的安装路径已正确配置,CMake能正常识别CUDA的库文件和头文件,未出现路径解析错误导致的无效库引用
内容的提问来源于stack exchange,提问作者Leonid Usyatinskiy

