[英]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.