如何用MSVC2017构建Xapian 1.4.10?编译配置报错求助
从你给出的错误信息来看,核心问题是configure无法让MSVC的cl编译器正常生成测试可执行文件,大概率是MSVC的环境变量没有正确加载到MSYS2终端,或者configure的参数设置有误。下面是一步步的排查和解决方法:
1. 先确保MSVC环境变量完全加载到MSYS2
MSVC编译器依赖大量环境变量(比如INCLUDE、LIB、PATH里的工具链路径),如果MSYS2终端没拿到这些变量,cl.exe根本无法正常工作。你可以通过两种方式解决:
方式一:从VS开发命令提示符启动MSYS2
打开开始菜单里的Visual Studio 2017文件夹,选择对应架构的开发命令提示符(比如x64 Native Tools Command Prompt for VS 2017,如果你要编译64位程序),然后在这个命令行里启动MSYS2的bash:C:\msys64\usr\bin\bash.exe这样MSVC的所有环境变量会自动带入MSYS2终端。
方式二:手动在MSYS2中导入MSVC环境变量
找到VS 2017的环境配置脚本(默认路径类似C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat,根据你的VS版本和安装路径调整),然后在MSYS2的bash里执行:source <(cmd.exe /c "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvars64.bat && set | sed 's/^\([^=]*\)=\(.*\)/export \1=\"\2\"/'")执行完后可以用
echo $PATH检查是否包含MSVC的bin目录(比如C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64)。
2. 修正configure的参数设置
你原来的CXX参数里的$PWD/compile可能是多余的(除非你自己有这个编译脚本),而且参数格式也需要调整:
修改后的configure命令建议如下:
./configure CC="cl -nologo" CXX="cl -nologo" CXXFLAGS="-EHsc" AR="lib" --build=x86_64-w64-mingw32
- 去掉了CXX参数里的
$PWD/compile,直接用MSVC的cl作为C++编译器 - 添加
--build参数明确告诉configure目标平台是64位Windows(如果是32位就用i686-w64-mingw32) - 确保
AR="lib"指向MSVC的lib.exe(加载环境变量后这个应该已经在PATH里)
3. 检查config.log定位具体错误
如果还是报错,一定要打开config.log看详细信息:
- 找到末尾关于"C compiler cannot create executables"的部分,看具体的错误提示:
- 如果是
cl: command not found:说明环境变量没加载好,PATH里没有cl.exe的路径 - 如果是编译时提示缺少头文件:检查
INCLUDE环境变量是否包含MSVC的include目录 - 如果是链接错误:检查
LIB环境变量是否包含MSVC的lib目录
- 如果是
4. 确保zlib被正确识别
因为你已经安装了zlib,configure可能需要明确的路径才能找到它,可以在configure命令前添加zlib的参数:
ZLIB_CFLAGS="-I/d/path/to/zlib/include" ZLIB_LIBS="/d/path/to/zlib/lib/zlib.lib" ./configure CC="cl -nologo" CXX="cl -nologo" CXXFLAGS="-EHsc" AR="lib" --build=x86_64-w64-mingw32
把路径换成你实际的zlib安装路径即可。
内容的提问来源于stack exchange,提问作者cswuyg

