Windows编译xoreos-tools时CMake无法找到Iconv的解决求助
问题描述
我在Windows 10系统上编译xoreos-tools仓库,仅添加了std::cout用于调试。使用CMake 3.29.3 x64配置时失败,报错如下:
CMake Deprecation Warning at CMakeLists.txt:20 (cmake_minimum_required):
Compatibility with CMake < 3.5 will be removed from a future version of
CMake.Update the VERSION argument
value or use a ... suffix to tell
CMake that the project does not need compatibility with older versions.Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19043.
CMake Error at C:/Program Files/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Iconv (missing: Iconv_LIBRARY Iconv_INCLUDE_DIR)
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files/CMake/share/cmake-3.29/Modules/FindIconv.cmake:165 (find_package_handle_standard_args)
CMakeLists.txt:266 (find_package)Configuring incomplete, errors occurred!
我尝试安装了GnuWin32的Iconv,并通过注册表添加了环境变量:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment] "Iconv_LIBRARY"="C:\\Program Files (x86)\\GnuWin32\\lib\\libiconv.lib" "Iconv_INCLUDE_DIR"="C:\\Program Files (x86)\\GnuWin32\\include"
关闭并重启CMake后,问题依旧,且CMake环境中未识别到这些变量。我还尝试通过CMake环境编辑器、主窗口的「Add Entry」按钮添加变量,均无效。
解决方法
1. 命令行直接指定Iconv路径
打开命令提示符或PowerShell,进入xoreos-tools的构建目录,执行CMake配置时直接通过参数强制指定路径:
cmake -G "Visual Studio 17 2022" -A x64 ^ -DIconv_INCLUDE_DIR="C:/Program Files (x86)/GnuWin32/include" ^ -DIconv_LIBRARY="C:/Program Files (x86)/GnuWin32/lib/libiconv.lib" ^ ../path/to/xoreos-tools-source
注意替换../path/to/xoreos-tools-source为你的源码目录路径,根据使用的VS版本调整-G参数(比如VS2019对应"Visual Studio 16 2019")。
2. 修改项目CMakeLists.txt强制指定路径
找到源码根目录下的CMakeLists.txt,在find_package(Iconv REQUIRED)(约第266行)之前添加以下代码:
set(Iconv_INCLUDE_DIR "C:/Program Files (x86)/GnuWin32/include") set(Iconv_LIBRARY "C:/Program Files (x86)/GnuWin32/lib/libiconv.lib")
让CMake跳过自动查找,直接使用你指定的路径。
3. 换用MSYS2/MinGW环境编译(推荐)
Windows下编译GNU系项目,MSYS2环境的依赖适配性更好:
- 安装MSYS2后打开MinGW x64终端
- 安装依赖:
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-iconv - 常规编译步骤:
git clone https://github.com/xoreos/xoreos-tools.git cd xoreos-tools mkdir build && cd build cmake .. -G "Unix Makefiles" make
4. 检查架构兼容性
你使用的是x64版本CMake,但GnuWin32的Iconv是32位(安装在Program Files (x86)),可能存在架构不匹配。若坚持用GnuWin32,可尝试找x64版本的Iconv,或切换到32位CMake重新配置。
内容的提问来源于stack exchange,提问作者Ξένη Γήινος

