韦德斯 2024-03-05 14:23 采纳率: 42.9%
浏览 46
已结题

mips交叉工具链配置qt的qmake,但动态链接库不对

根据网上qt交叉编译工具链教程,我使用mips编译工具链配置qmake,然后在Qt creator的kits添加这个qmake,然后这个套件编译出来的文件格式是ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 4.8.0, with debug_info, not stripped
而不是ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-mipsn8.so.1, for GNU/Linux 4.8.0, with debug_info, not stripped,这个是能在开发板上跑的
区别是:实际配置出来的qmake是大端,链接库/lib/ld.so.1,这个应该是x86的,但能在板子上跑的使用的是小端,库是 /lib/ld-linux-mipsn8.so.1,这个库是mips的
请问这个现象怎么解决?需要修改什么配置,比如说qmake.conf,qt.conf,./configure参数之类的,才能使它链接到/lib/ld-linux-mipsn8.so.1?
我的qmake.conf是这样的:

img

./configure参数是这样的:

img

img

  • 写回答

18条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-05 14:24
    关注

    引自免费微信小程序:皆我百晓生

    在MIPS交叉编译环境下配置Qt时,遇到qmake生成的可执行文件链接了错误的动态链接器,可以通过以下步骤进行修正:

    1. 调整工具链配置: 首先确保你的MIPS交叉编译工具链正确设置了--sysroot参数,以便于指向目标系统的根目录。例如,在运行./configure命令时,应包含如下参数(假设你的 MIPS 系统根目录是 /path/to/mips-rootfs):

      ./configure -prefix /opt/qt-cross-mips \
                  -device-option CROSS_COMPILE=mips-linux-gnu- \
                  -device-option SYSROOT=/path/to/mips-rootfs \
                  -opensource -confirm-license \
                  -release -reduce-exports \
                  -no-pch -no-use-gold-linker \
                  -nomake examples -nomake tests \
                  -skip wayland -skip qtwebengine \
                  # 其他可能需要的配置选项
      
    2. 修改qmake.conf: Qt在配置过程中会使用mkspecs目录下的特定平台的qmake配置文件,对于MIPS交叉编译环境,通常位于/path/to/qt_source_dir/mkspecs/devices/linux-mips-g++目录下。打开其中的qmake.conf文件,并确保指定正确的C、C++编译器路径和链接器路径。同时,你需要更新QMAKE_LFLAGS以指定正确的动态链接器:

      QMAKE_CC                = mips-linux-gnu-gcc
      QMAKE_CXX               = mips-linux-gnu-g++
      QMAKE_LINK              = mips-linux-gnu-g++
      QMAKE_LINK_SHLIB        = mips-linux-gnu-g++
      
      # 设置正确的动态链接器路径
      QMAKE_LFLAGS            += -Wl,-dynamic-linker,/lib/ld-linux-mipsn8.so.1
      
    3. 检查qt.conf: 如果qt.conf用于指导Qt库的加载,则它不影响动态链接器的选择,但在部署到开发板时确保Qt库能找到也是必要的。

    4. 重新编译Qt: 保存并关闭qmake.conf文件后,重新运行./configure命令(使用上面提到的参数),然后执行makemake install来编译和安装Qt。

    通过上述步骤,你应该能够解决动态链接器不匹配的问题。不过,请注意实际环境中根据你的具体需求,可能还需要针对不同的MIPS架构版本(如mipsel与mips)以及系统版本进行微调。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(17条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 修改了问题 3月5日
  • 赞助了问题酬金20元 3月5日
  • 展开全部