Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;Phidget eventhandler未定义引用';链接器&x27;_C++_Qt_Linker Errors_Undefined Reference - Fatal编程技术网

C++ C++;Phidget eventhandler未定义引用';链接器&x27;

C++ C++;Phidget eventhandler未定义引用';链接器&x27;,c++,qt,linker-errors,undefined-reference,C++,Qt,Linker Errors,Undefined Reference,我得到以下错误。根据最后一行,我认为这是链接器错误。然而,我真的不知道我在说什么我是初学者。如果你碰巧发现了任何其他不好的地方,请告诉我 错误:未定义对AttachHandler(_CPhidget*,void*)的引用 错误:未定义对DetachHandler(_CPhidget*,void*)的引用 错误:未定义对ErrorHandler(_CPhidget*,void*,int,char const*)的引用 错误:未定义对数据的引用(_CPhidgetBridge*,void*,int,

我得到以下错误。根据最后一行,我认为这是链接器错误。然而,我真的不知道我在说什么我是初学者。如果你碰巧发现了任何其他不好的地方,请告诉我

错误:未定义对
AttachHandler(_CPhidget*,void*)的引用
错误:未定义对
DetachHandler(_CPhidget*,void*)的引用 错误:未定义对
ErrorHandler(_CPhidget*,void*,int,char const*)的引用
错误:未定义对
数据的引用(_CPhidgetBridge*,void*,int,double)' :-1:错误:collect2:ld返回了1个退出状态

我有一个名为eventhandlers.h的头文件,其中包含:

#ifndef EVENTHANDLERS_H
#define EVENTHANDLERS_H

#include <phidget21.h>


int CCONV AttachHandler(CPhidgetHandle SENSOR, void *userptr);
int CCONV DetachHandler(CPhidgetHandle SENSOR, void *userptr);
int CCONV ErrorHandler(CPhidgetHandle SENSOR, void *userptr, int ErrorCode, const char *DESCR);
int CCONV Data(CPhidgetBridgeHandle SENSOR, void *userptr, int index, double val);


#endif // EVENTHANDLERS_H
最后,我把整个事情都弄得一团糟

#include "palmtools.h"
#include "QuadBridge.h"
#include <QApplication>

QuadBridge *qb;

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
PalmTools w;
w.show();

qb = new QuadBridge(4);

return a.exec();
}
#包括“palmtools.h”
#包括“QuadBridge.h”
#包括
四桥*qb;
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
PalmTools w;
w、 show();
qb=新的四桥(4);
返回a.exec();
}

谢谢你的帮助

您可以看到

int CCONV AttachHandler(CPhidgetHandle SENSOR, void *userptr); //etc
编译器可以编译调用声明函数的源代码。但是,在链接步骤中,链接器找不到这些函数的定义,无法将它们包含到输出文件中,因为在编译器传递给它的文件中找不到它们。由于您使用的是第三方库,所以这些函数在“库文件”中预编译,您需要将其包含在链接步骤中


如果您使用的是Visual Studio,请右键单击项目并打开属性。在
链接器中
->
输入
->
其他依赖项
添加包含缺少定义的lib文件的名称(
phidget21.lib
,我假定)。另外,请确保链接器的库路径包含包含该文件的文件夹(您可以在属性页中的
VC++目录
选项卡下进行设置)。

感谢您的指导。不幸的是,我没有使用VS。我使用的是linux。我在QT-make文件中添加了以下行,但没有任何帮助。LIBS+=-L$$PWD/../../../../../../../../../usr/lib/-lphidget21@atomSmasher尝试指向具有绝对路径的so文件进行测试:
LIBS+=/usr/lib/phidget21.so
或类似文件,然后再次运行qmake。如果直接指向.a或.so库,则会出现大量未定义的引用错误。我已经决定它与这个QT makefile以及它如何查找库有关。为了确保phidget正常工作,我使用终端编译了phidget提供的一个简单测试程序。它与gcc编译器配合使用。@AtomMasher只需尝试修改Qt的pro文件,而不是makefile本身。我会看看能不能在一个小时左右帮上忙。
int CCONV AttachHandler(CPhidgetHandle SENSOR, void *userptr); //etc