开发者
资源
PySide2安装-ELF load command alignment not page-aligned
PySide2安装-ELF load command alignment not page-aligned
发表于2023/07/05
1040

问题描述

在运行测试脚本时报错:ELF load command alignment not page-aligned,错误信息如下 true

引发诱因

pyside编译生成的相关动态库文件使用的内存页大小与系统的内存页大小不兼容。

解决方案

重新编译出问题的so文件,在编译的时候传入参数-W1, -z, max-page-size=xxx

# 查看系统内存页大小
    getconf PAGESIZE

在此修改对应脚本的Makefile文件,编译后覆盖原so文件

# 修改Makefile脚本
    vi /path/to/pyside/.env3_build/py3.6-qt5.13.0.64bit-release/shiboken2/Makefile
    # 添加编译标志 PAGE_SIZE_FLAG = -W1, -z, max-page-size=xxx
    # 将所@$(CMAKE_COMMAND)替换为@$(CMAKE_COMMAND) $(PAGE_SIZE_FLAG)
     
    # 重新编译
    make -j32
     
    # 替换原so文件
    cp shiboken2.cpython-36m-aarch64-linux-gnu.so /path/to/python/site-packages/shiboken2/
so文件名称对应Makefile位置文件覆盖位置
shiboken2.cpython-36m-aarch64-linux-gnu.so/path/to/pyside/.env3_build/py3.6-qt5.13.0.64bit-release/shiboken2/path/to/python/site-packages/shiboken2/
QtCore.cpython-36m-aarch64-linux-gnu.so/path/to/pyside/.env3_build/py3.6-qt5.13.0.64bit-release/pyside2/PySide2path/to/python/site-packages/PySide2
QtWidgets.cpython.36m-aarch36-linux-gnu.so/path/to/pyside/.env3_build/py3.6-qt5.13.0.64bit-release/pyside2/PySide2/path/to/python/site-packages/PySide2

测试脚本

import sys
    import random
    from PySide2.QtWidgets import (QApplication, QLabel, QPushButton,
                                   QVBoxLayout, QWidget)
    from PySide2.QtCore import Slot, Qt
     
    class MyWidget(QWidget):
        def __init__(self):
            QWidget.__init__(self)
     
            self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
                "Hola Mundo", "Привет мир"]
     
            self.button = QPushButton("Click me!")
            self.text = QLabel("Hello World")
            self.text.setAlignment(Qt.AlignCenter)
     
            self.layout = QVBoxLayout()
            self.layout.addWidget(self.text)
            self.layout.addWidget(self.button)
            self.setLayout(self.layout)
     
            # Connecting the signal
            self.button.clicked.connect(self.magic)
     
        @Slot()
        def magic(self):
            self.text.setText(random.choice(self.hello))
     
    if __name__ == "__main__":
        app = QApplication(sys.argv)
     
        widget = MyWidget()
        widget.resize(800, 600)
        widget.show()
     
        sys.exit(app.exec_())
收藏举报
Level 1
0
帖子
0
粉丝
0
获赞