繁体   English   中英

Qt5链接错误

[英]Qt5 linking error

我刚刚安装了qt5-default软件包,在我的系统(linux mint petra)上安装了Qt5。 我有一个简单的.ui文件和一个main.cpp。 使用uic,我可以将.ui文件转换为.h文件,该文件包含在main.cpp中。 直到现在都没问题。

我运行qmake -project,qmake和make。 编译很好,我得到main.o. 但链接给了我一堆“未定义的引用......”。

所以,我检查了库。 这是链接器调用:

g++ -m64 -Wl,-O1 -o qttest main.o   -L/usr/X11R6/lib64 -lQt5Gui -L/usr/lib/x86_64-linux-gnu -lQt5Core -lGL -lpthread

好的,所以我搜索了这些库。 据我所知,参数-lQt5Core强制链接器在使用-L选项指定的目录中查找名为libQt5Core.a的文件。 但是,此文件夹仅包含libQt5core.so。 与其他所需库相同。 据我所知,.a文件用于静态链接,而.so用于动态链接。

现在,我该怎么办? 我应该在互联网上搜索.a库吗? 为什么qmake会生成一个尝试静态链接的makefile? 我错过了一些包吗? 我没有动态链接。 我是否必须添加用于加载.so的代码? 作为第一步,我感觉静态链接更容易。

最好的祝福

使用uic,我可以将.ui文件转换为.h文件

不,你应该让你的构建系统做到这一点。 即在.pro文件中使用FORMS变量。 或者你是否愿意每次触摸你的.ui时手动重新运行uic?

据我所知,参数-lQt5Core强制链接器在使用-L选项指定的目录中查找名为libQt5Core.a的文件。 但是,此文件夹仅包含libQt5core.so。 与其他所需库相同。 据我所知,.a文件用于静态链接,而.so用于动态链接。

这只是故事的一半。 在支持共享库(即所有现代系统)的系统上,GNU ld将首先查找共享库(即.so ),并且只有在找不到共享库时才会查找静态库( .a ) 。

无论如何,这不是你的问题。 您的问题是您正在使用.ui文件,即小部件,并且您没有告诉qmake您想要QtWidgets库,因为链接器的命令行中没有-lQtWidgets

解决方案:添加

QT += widgets

到你的.pro文件,重新运行qmake,make,就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM