• 5393阅读
  • 4回复

[提问]编译出现错误信息:collect2: ld returned 1 exit status [复制链接]

上一主题 下一主题
离线劉俊
 
只看楼主 倒序阅读 楼主  发表于: 2012-10-23
Qt新手,今天刚装了个"Qt_SDK_Win_offline_v1_2_en",然后照着《C++ GUI Qt4编程 第二版》上面的第一个程序来敲。结果出现错误,一开始是找不到头文件,后来将书上的那句“#include<QLabel>”改为“#include<QtGUI/QLabel>”,找不到头文件错误信息消失了。
但是另外一个很奇怪的错误信息并没有消失:“D:\QT\QtGUI\QtGUI\main.cpp:7: 错误:undefined reference to `_imp___ZN6QLabelC1ERK7QStringP7QWidget6QFlagsIN2Qt10WindowTypeEE'” 、“:-1: 错误:collect2: ld returned 1 exit status”。

源代码如下:
  1. #include <QtCore/QCoreApplication>
  2. #include <QtGui/QLabel>
  3. int main(int argc, char *argv[])
  4. {
  5. QCoreApplication a(argc, argv);
  6. QLabel *label = new QLabel("Hello Qt!");
  7. label->show() ;
  8. return a.exec();
  9. }


在网上搜索过,出现这种情况的原因大概有:
1、.编译成功的例子在后台执行,有时一闪而过,如果再次build ,则会提示上述错误。
解决方法:打开任务管理器,找到相应的exe进程,关闭即可;  或者直接关闭QtCreator。
2.没有编译成功的情况下,最常见情况是程序本身需要include的头文件被遗漏了
解决方法:细心查找基类所用的头文件,include之后即可。
3..h文件中相关的槽函数在cpp文件中没有定义
解决方法:查找遗漏的槽函数,根据需要,具体的定义。

------------------------------------------------------
前两种大概都排除了,只是第三种可能还没有排除掉。
自己打开<qlabel.h>头文件看定义,QLabel类的构造函数只有两个:
  1. explicit QLabel(QWidget *parent=0, Qt::WindowFlags f=0);
  2. explicit QLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);

按上面的声明看,我的代码应该是调用第二个函数,应该没有调用错吧?如果这样的话,就真的不知道是哪里出问题了。

请问一下前辈,是不是我没有链接相应的库?还是其它地方出错了?
弄了很久也没找到解决办法,希望知道的前辈能够解答一下,谢谢。



离线XChinux

只看该作者 1楼 发表于: 2012-10-23
不要用SDK,直接下载library framework包,自己安装编译器,自己设置环境变量,手工写.pro,进行编译。将编译环境搞得清楚些,再回过头来用IDE,否则连基本的QTDIR、includepath、lib path都不清楚,遇到这类问题,就不知道如何解决了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ggkuroky
只看该作者 2楼 发表于: 2012-10-23
你的程序我一运行就崩了,我改成下面的就可以运行了!
#include <QtGui/QApplication>
#include <QtGui/QLabel>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLabel *label = new QLabel("Hello Qt!");
label->show() ;


你是不是没配置环境变量呀!!

return a.exec();
}
相信自己,天道酬勤!
离线劉俊
只看该作者 3楼 发表于: 2012-10-24
引用第1楼XChinux于2012-10-23 10:22发表的  :
不要用SDK,直接下载library framework包,自己安装编译器,自己设置环境变量,手工写.pro,进行编译。将编译环境搞得清楚些,再回过头来用IDE,否则连基本的QTDIR、includepath、lib path都不清楚,遇到这类问题,就不知道如何解决了。


谢谢前辈的回复。
前辈说的对。但是因为最近要帮别人弄个东西,所以想快点上手。
如果时间充足的话,我也会像你说那样学习的。


离线劉俊
只看该作者 4楼 发表于: 2012-10-24
引用第2楼ggkuroky于2012-10-23 19:37发表的  :
你的程序我一运行就崩了,我改成下面的就可以运行了!
#include <QtGui/QApplication>
#include <QtGui/QLabel>
int main(int argc, char *argv[])
.......

谢谢你的回复。
呃。。。。其实是个很傻B的问题,因为头文件错了。我写的是QCore...,但是书上是按照你那样写的。
奇怪,当时第一时间就是检查头文件,可以不知道就没有看到。
改天,只看了一眼就知道问题了。

快速回复
限100 字节
 
上一个 下一个