如何解决使用SWIG为manylinux编译python wheel而不链接到libpython
我正在尝试使用带有wheel格式的python来更深入地研究二进制软件包,我想我可以尝试进行轮化one of my dependencies作为练习。
为了最大化结果包的可重用性,我想使用manylinux
容器来构建它,该容器使用我可能遇到的最低公分母来编译包含在软件包中的二进制文件。但是我不确定如何避免链接到特定的libpython.so
。 docs用一种相当抽象的方式描述了这一点:
请注意,libpythonX.Y.so.1不在允许manylinux1扩展链接到的库列表中。几乎在所有情况下都不需要显式链接到libpythonX.Y.so.1:ELF链接的工作方式是,加载到解释器中的扩展模块会自动访问所有解释器的符号,而无论扩展本身是否明确链接到libpython。此外,显式链接到libpython在通用配置中会产生问题,在该通用配置中,不是使用--enable-shared构建Python。特别是在Debian和Ubuntu系统上,apt install pythonX.Y甚至不安装libpythonX.Y.so.1,这意味着任何依赖libpythonX.Y.so.1的轮子都可能无法导入。
所以我想知道,SWIG会为C函数生成python包装器,并且显然使用了libpython
函数,因此链接器将尝试链接{{1 }}没有提供。如果我理解正确,我应该以某种方式使引用悬空/取消链接,并且解释器将在加载共享库时在运行时提供这些符号,但是我应该如何首先编译它?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。