[Qt] 编译Qt工程时遇到 DSO missing from command line

现象:

在进行跨平台移植时,编译工程遇到如下提示:

/usr/bin/ld: tmp/obj/mywindow.o: undefined reference to symbol 'XShapeCombineRectangles'
/usr/bin/ld: //lib/x86_64-linux-gnu/libXext.so.6: error adding symbols: DSO missing from command line

分析:

首先查看源码mywindow.cpp ,代码中使用了 X11 库完成鼠标穿透,对比报错中的符号 “XShapeCombineRectangles” ,可以确定确实和 X11 库有关联。

由于是进行移植工作的,而 Windows 下一般不会使用 X11 作为窗口管理器,所以需要关注工程文件中是否链接了 X11 及其扩展库,排查 pro 文件后发现确实没有链接。

因此添加如下命令:

LIBS += -lX11

添加后发现问题还在,再观察一遍报错提示发现是在 链接  libXext.so.6 时报错  DSO missing from command line,因此再添加 x11 扩展库:

LIBS += -lX11 -lXext

问题解决。

小结:

  • 找不到符号问题一定是缺库,具体缺什么库可以根据报错找不到的符号名来确定,比如当前问题中缺少的符号 “XShapeCombineRectangles” 就是 X11 库中的。
  1. 可以使用  dpkg -L libx11-dev  来确定库的安装位置,因为有时候自行编译库时会单独指定非系统链接路径,这个时候如果只是 -l库名 则也可能报错,此时就需要使用 -L库路径 单独指定链接路径。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值