[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库路径 单独指定链接路径。

猜你喜欢

转载自blog.csdn.net/ykun089/article/details/120665376
DSO