我刚刚通过安装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,就是这样。