Qt5链接错误

时间:2014-05-08 15:43:56

标签: c++ linux gcc qt5

我刚刚在我的系统上安装了Qt5(linux mint petra),安装了qt5-default软件包。 我有一个简单的.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的代码? 作为第一步,我感觉静态链接更容易。

最好的问候

1 个答案:

答案 0 :(得分:2)

  

使用uic,我可以将.ui文件翻译成.h文件

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

  

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

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

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

解决方案:添加

QT += widgets

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