You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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:

  1. 打开这个文件,搜索包含lib util的段落
  2. 给这段代码添加条件判断,确保只在非Windows环境下链接:
    if [ os.name ] != NT {
        lib util ;
    }
    

这样就能彻底阻止Boost给Windows目标添加libutil的依赖。

完成以上步骤后,重新编译应该就能顺利通过了。

内容的提问来源于stack exchange,提问作者nilsnolde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:53:15