Windows10+VS2017从源码构建Emgu:MSBuild命令执行失败求助
我之前也碰到过类似的编译坑,给你几个逐步排查的方向,应该能帮你定位问题:
先确认VS2017环境加载是否正确
你用了VS2017开发者控制台,一定要确保打开的是**「x64 Native Tools Command Prompt for VS 2017」**,而不是x86版本的控制台。选错的话会导致工具链架构不匹配,MSBuild根本找不到对应平台的编译工具。另外,在控制台里输入msbuild -version,如果能正常输出VS2017对应的MSBuild版本(比如15.x系列),说明环境没问题;如果报错,就得去VS安装器里检查「MSBuild Tools」组件是否完整安装,特别是x64相关的部分。排查CMake版本兼容性
CMake 3.10.2确实有点年头了,Emgu的新源码可能已经不兼容这么旧的版本了。建议你升级到CMake 3.18以上的稳定版(比如3.20.x),旧版本CMake在生成VS2017项目时容易出现配置错误,进而导致MSBuild编译失败。升级后记得删除之前生成的build文件夹,重新用CMake配置,配置时明确指定VS2017的x64生成器:cmake -G "Visual Studio 15 2017 Win64" ..手动执行脚本里的MSBuild命令看详细错误
脚本只提示MSBuild失败往往不够详细,你可以打开Build_Binary_x86-64_doc.bat,把里面的MSBuild命令复制出来,直接在控制台里执行。这样能看到具体的报错信息——是找不到项目文件?还是依赖库缺失?或者是编译语法错误?比如命令可能是类似msbuild YourEmguProject.sln /p:Platform=x64 /t:Build,手动执行后就能拿到精准的报错点。检查依赖项和架构匹配
Emgu依赖OpenCV等第三方库,一定要确认你用的是x64版本的依赖库,32位的话会和x86-64的编译目标冲突。另外,CMake配置时要确保正确指定了依赖库的路径,或者环境变量里已经配置好了依赖的bin目录(比如OpenCV的bin目录要加入PATH),不然MSBuild链接阶段会报错找不到库文件。权限和目录问题
试试用管理员权限打开VS2017控制台再运行脚本,有时候普通权限下无法写入编译输出目录会导致MSBuild失败。另外,不要把Emgu源码放在系统受保护的目录里(比如C:\Program Files),移到自己的用户目录(比如C:\Users\YourName\Projects)下,避免权限问题。
内容的提问来源于stack exchange,提问作者Diego

