在Fedora Rawhide上用MinGW64编译boost-python 1.73.0遇libutil缺失问题
解决MinGW64编译Boost-Python 1.73.0时找不到
-lutil的问题 这个错误的核心原因很明确:libutil是类Unix系统特有的工具库,Windows环境根本不需要也不存在这个库,问题出在Boost.Build的跨平台配置上,它错误地给Windows目标添加了Unix库的链接依赖。下面是一步步的解决办法:
1. 先确认MinGW Python开发包是否完整
首先确保你已经安装了Fedora提供的MinGW64 Python开发包,这个包包含了Windows Python的导入库:
sudo dnf install mingw64-python3-devel
这个包会提供/usr/x86_64-w64-mingw32/sys-root/mingw/lib/python39.dll.a(对应Python 3.9),这是我们需要链接的正确库,而不是libutil。
2. 修正user-config.jam的Python配置
你的现有配置没有明确指定Windows环境下的Python链接参数,导致Boost.Build自动尝试添加Unix风格的依赖。修改你的/root/user-config.jam为:
using gcc : mingw64 : x86_64-w64-mingw32-g++ ; using python : 3.9 : /usr/x86_64-w64-mingw32/sys-root/mingw/bin/python3.9.exe : /usr/x86_64-w64-mingw32/sys-root/mingw/include/python3.9 : /usr/x86_64-w64-mingw32/sys-root/mingw/lib : <linkflags>-lpython39 <define>BOOST_ALL_NO_LIB=1 ;
这里做了几个关键调整:
- 简化了库路径到
/mingw/lib,让Boost能直接找到Python的导入库 - 用
<linkflags>-lpython39强制指定链接Windows版的Python库 - 添加
<define>BOOST_ALL_NO_LIB=1避免Boost自动链接不必要的系统库
3. 调整b2编译命令,强制覆盖链接参数
重新执行编译命令时,额外添加python.linkflags=-lpython39参数,确保Boost.Build不会再尝试链接libutil:
./b2 --with-python address-model=64 target-os=windows toolset=gcc-mingw64 \ variant=release link=shared --user-config=/root/user-config.jam \ python.linkflags=-lpython39
4. 极端情况:修改Boost的Jamfile(如果上述方法无效)
如果还是出现链接错误,说明Boost 1.73.0的Python模块存在跨平台配置bug,需要手动修改boost/python/build/Jamfile.v2:
- 打开这个文件,搜索包含
lib util的段落 - 给这段代码添加条件判断,确保只在非Windows环境下链接:
if [ os.name ] != NT { lib util ; }
这样就能彻底阻止Boost给Windows目标添加libutil的依赖。
完成以上步骤后,重新编译应该就能顺利通过了。
内容的提问来源于stack exchange,提问作者nilsnolde
相关产品推荐
相关产品推荐

