Qt5链接错误

Qt5 linking error

本文关键字:错误 链接 Qt5      更新时间:2023-10-16

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

我运行qmake -project, qmake和make。编译很好,我得到main。0。但是链接给了我一堆"未定义的引用…"。

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

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

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

现在,我该怎么做呢?我应该在网上搜索一个。a图书馆吗?为什么qmake生成一个makefile,它尝试静态链接?我是不是少了一些包裹?我从来没有动态链接过。我必须添加代码来加载。so吗?我觉得静态链接作为第一步更容易。

使用uic,我可以把我的。ui文件转换成。h文件

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

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

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

不管怎样,那不是你的问题。你的问题是你正在使用.ui文件,也就是小部件,并且你没有告诉qmake你想要QtWidgets库,因为在链接器的命令行中没有-lQtWidgets

解决方案:加

QT += widgets

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

相关文章: