• 9480阅读
  • 2回复

[已解决]编译含qwt的控件时老出现undefined reference [复制链接]

上一主题 下一主题
离线chwoozy
 

只看楼主 倒序阅读 楼主  发表于: 2006-05-09
再次感谢yunfan兄,全靠他我才明白问题的解决之道。下面是他的回答:

出现这样字样的提示,
“undefined reference to ” ,
无论是c,gtk 还是 c++,qt,kde 程序, 都是链接程序 ld 没有找到链接库的原因。 链接库必须由开发者手工指定, 你用 QPushButton 没有问题, 是因为 qt 工程文件里默认已经含有了配置 qt 库的命令, qmake 生成 makefile 的时候,会自动加上对 qt 的链接命令。 而Qwt是第三方扩展库, qt 并不认识, 也不知道里面是什么东西。 所以, 你做如下操作:
1。 打开你的工程文件, 就是以 pro 为扩展名的文件
2。 找个地方加一行: LIBS += -lqwt
3。 保存 pro 文件退出


然后重新编译试试, good luck


我在尝试将QtDesigner编出带qwt控件的界面进行编译时老是出现undefined reference的报错。起初我以为是我自己编的代码的问题,后来发现如果我把我界面里的那个控件换成Qt标准控件QPushButton编译就不会出现问题。下面是编译出错的错误信息:
  1. main.o: In function `Ui_Form::setupUi(QWidget*)':
  2. /home/chwoozy/qt/widget/ui_untitled.h:20: undefined reference to `QwtKnob::QwtKnob(QWidget*)
  3. collect2: ld returned 1 exit status
  4. make: *** [widget] 错误 1

但是很奇怪的是在qwt的文档里所述的QwtKnob的构造函数里的参数就是和QPushButton一样的QWidget*,那怎么会还出错呢?下面是截取的文档的一段:
  1. Constructor & Destructor Documentation
  2. QwtKnob::QwtKnob   (   QWidget *   parent = NULL   )   [explicit]
  3.  
  4. Constructor.
  5. Parameters:
  6. parent   Parent widget

我再把我的源文件帖出来吧
main.cpp
  1.   #include "ui_untitled.h"
  2.   #include <QApplication>
  3.   int main(int argc, char *argv[])
  4.   {
  5.       QApplication app(argc, argv);
  6.       QWidget *widget = new QWidget;
  7.       Ui::Form ui;
  8.       ui.setupUi(widget);
  9.       widget->show();
  10.       return app.exec();
  11.   }

导致编译不能通过的那个ui_untitled.h
  1. #ifndef UI_UNTITLED_H
  2. #define UI_UNTITLED_H
  3. #include <QtCore/QVariant>
  4. #include <QtGui/QAction>
  5. #include <QtGui/QApplication>
  6. #include <QtGui/QButtonGroup>
  7. #include <QtGui/QWidget>
  8. #include "qwt_knob.h"//Qwt提供的自定义部件QwtKnob的头文件
  9. class Ui_Form
  10. {
  11. public:
  12.   QwtKnob *Knob;
  13.   void setupUi(QWidget *Form)
  14.   {
  15.   Form->setObjectName(QString::fromUtf8("Form"));
  16.   Form->resize(QSize(400, 300).expandedTo(Form->minimumSizeHint()));
  17.   Knob = new QwtKnob(Form);
  18.   Knob->setObjectName(QString::fromUtf8("Knob"));
  19.   Knob->setGeometry(QRect(130, 100, 100, 100));
  20.   Knob->setOrientation(Qt::Horizontal);
  21.   retranslateUi(Form);
  22.   QMetaObject::connectSlotsByName(Form);
  23.   } // setupUi
  24.   void retranslateUi(QWidget *Form)
  25.   {
  26.   Form->setWindowTitle(QApplication::translate("Form", "Form", 0, QApplication::UnicodeUTF8));
  27.   Q_UNUSED(Form);
  28.   } // retranslateUi
  29. };
  30. namespace Ui {
  31.   class Form: public Ui_Form {};
  32. } // namespace Ui
  33. #endif // UI_UNTITLED_H

修改之后可以编译通过的ui_untitled.h(就是把界面中的QwtKnob部件替换成QPushButton部件后就没有问题了,怪事)
  1. #ifndef UI_UNTITLED_H
  2. #define UI_UNTITLED_H
  3. #include <QtCore/QVariant>
  4. #include <QtGui/QAction>
  5. #include <QtGui/QApplication>
  6. #include <QtGui/QButtonGroup>
  7. #include <QtGui/QPushButton>
  8. #include <QtGui/QWidget>
  9. class Ui_Form
  10. {
  11. public:
  12.   QPushButton *pushButton;
  13.   void setupUi(QWidget *Form)
  14.   {
  15.   Form->setObjectName(QString::fromUtf8("Form"));
  16.   Form->resize(QSize(400, 300).expandedTo(Form->minimumSizeHint()));
  17.   pushButton = new QPushButton(Form);
  18.   pushButton->setObjectName(QString::fromUtf8("pushButton"));
  19.   pushButton->setGeometry(QRect(160, 160, 87, 27));
  20.   retranslateUi(Form);
  21.   QMetaObject::connectSlotsByName(Form);
  22.   } // setupUi
  23.   void retranslateUi(QWidget *Form)
  24.   {
  25.   Form->setWindowTitle(QApplication::translate("Form", "Form", 0, QApplication::UnicodeUTF8));
  26.   pushButton->setText(QApplication::translate("Form", "PushButton", 0, QApplication::UnicodeUTF8));
  27.   Q_UNUSED(Form);
  28.   } // retranslateUi
  29. };
  30. namespace Ui {
  31.   class Form: public Ui_Form {};
  32. } // namespace Ui
  33. #endif // UI_UNTITLED_H

我在想,会不会是因为没有把QwtKnob的实现即qwt_knob.cpp给包括进来
请各位高手多多指教了
[ 此贴被chwoozy在2006-05-10 11:40重新编辑 ]
离线chwoozy

只看该作者 1楼 发表于: 2006-05-09
关于Qwt的下载和文档可以到qwt.sourceforge.net去看,不过上面的文档貌似是4.2的
离线oscarboycn

只看该作者 2楼 发表于: 2011-05-09
刚才还在纠结这个问题
http://www.21ic.com
http://bbs.eetop.cn
http://www.eetop.cn/
http://www.eet-china.com/
http://www.netyi.net/
http://www.pcbbbs.com/
http://www.pcbtech.net/
快速回复
限100 字节
 
上一个 下一个