微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Fedora上使用MinGW64编译Windows的boost-python 1.73.0

如何解决在Fedora上使用MinGW64编译Windows的boost-python 1.73.0

我需要在Fedora的生皮上使用MinGW64编译boost-python 1.73.0,以便为Windows 10 64bit构建Python绑定(不,我不能使用Visual Studio)。不幸的是,Fedora的mingw64-boost软件包中唯一缺少的库是boost-python,哎呀!

实际上,所有依赖项都打包在Fedora for MinGW64上,这非常不错。所以我正在尝试建立自己:

wget https://dl.bintray.com/boostorg/release/1.73.0/source/boost_1_73_0.tar.bz2
tar -xjf boost_1_73_0.tar.bz2 && cd boost_1_73_0
./bootstrap.sh
# in a docker container,so /root
./b2 --with-python address-model=64 target-os=windows toolset=gcc-mingw64 \
     variant=release link=shared --user-config=/root/user-config.jam 

还有一个~/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/python3.9 ;

它成功运行了一段时间,但随后出现错误

/usr/lib/gcc/x86_64-w64-mingw32/10.2.1/../../../../x86_64-w64-mingw32/bin/ld: cannot find -lutil
collect2: error: ld returned 1 exit status

所以libutil丢失了。真是个超级特定的名字!我尝试(重新)安装所有glibc软件包(显然通常在其中的libutil.so),无济于事。还找到了/usr/x86_64-w64-mingw32/sys-root/mingw/lib/libutildll.a,尝试通过./b2 library=...包含它,再次没有运气。

这是怎么回事?顺便说一句,this gist的完整命令失败了。

解决方法

因此,这需要对升压源进行修补才能摆脱libutil链接。为了完全编译,必须应用一批其他补丁文件。这是我在fedora:rawhide中的完整命令链:

  1. 获取资源
wget https://dl.bintray.com/boostorg/release/1.73.0/source/boost_1_73_0.tar.bz2
tar -xjf boost_1_73_0.tar.bz2
cd boost_1_73_0
  1. 设置~/user-config.jam
cat >> ~/user-config.jam <<EOL
using gcc : mingw64 : x86_64-w64-mingw32-g++ ;

using python
     : 3.9
     : /usr/x86_64-w64-mingw32/sys-root/mingw/bin/python3.9
     : /usr/x86_64-w64-mingw32/sys-root/mingw/include/python3.9
     : /usr/x86_64-w64-mingw32/sys-root/mingw/lib/python3.9/config-3.9 ;
EOL
  1. 引导增强
./bootstrap.sh --with-icu=/usr/x86_64-w64-mingw32/sys-root/mingw/ --with-toolset=gcc
  1. 从{li>修补./boost_1_73_0_patches中的所有文件

通常这样申请:

patch -p1 -i patches/boost-1.63.0-python-test-PyImport_AppendInittab.patch
  1. 构建boost-python
./b2 address-model=64 link=shared runtime-link=shared threading=multi threadapi=win32 toolset=gcc variant=release python=3.9 --with-python

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?