除了两个构造函数外,C++库导入也可以工作

C++ lib import works except for two constructors

本文关键字:C++ 导入 工作 也可以 构造函数 两个      更新时间:2023-10-16

我正在用第三方dll(dynamicxel_sdk)编写一个pogram。我已经在visualstudio中实现了它,效果很好。现在我正试图将代码移植到Qt,以将gui封装在它周围

dll的include工作正常。它向我显示并自动完成我编写和编译代码的任何函数和对象,没有任何问题,但当我试图构建两个重要的Objects时,我会遇到以下错误:

mainwindow.obj:-1: Fehler: LNK2019: unresolved external symbol "__declspec(dllimport) public: static class dynamixel::PacketHandler * __cdecl dynamixel::PacketHandler::getPacketHandler(float)" (__imp_?getPacketHandler@PacketHandler@dynamixel@@SAPEAV12@M@Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)
mainwindow.obj:-1: Fehler: LNK2019: unresolved external symbol "__declspec(dllimport) public: static class dynamixel::PortHandler * __cdecl dynamixel::PortHandler::getPortHandler(char const *)" (__imp_?getPortHandler@PortHandler@dynamixel@@SAPEAV12@PEBD@Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)

经过谷歌的大量打磨,本质是我导入错误,或者我在编写dll时出错。据我所知,dll不可能真的有问题,因为它适用于visual studio。到目前为止,我尝试了不同的取消排列:作为成员变量,在主函数中,作为成员函数中的变量,但似乎都不起作用。我还尝试单独包含dll的所有标头。

我刚开始在这个项目中使用qt,所以我真的不知道qt包含dll的方式是否有问题。

标头(底部的指针声明):

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qcustomplot.h"
#include "include/dynamixel_sdk.h"

/****************************************/
/*      MEMBER VARIABLE DECLARATION     */
/****************************************/
dynamixel::PortHandler   *portHandler;
dynamixel::PacketHandler *packetHandler;
QPlainTextEdit *console;
};

#endif // MAINWINDOW_H

函数调用:

using namespace dynamixel;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setupGUI();
console= ui->console;
portHandler   = PortHandler::getPortHandler("COM0");
packetHandler = PacketHandler::getPacketHandler(PROTOCOL_VERSION);
portHandler->setBaudRate(BAUDRATE);
}

在.pro文件中导入lib:

SOURCES += main.cpp
mainwindow.cpp 
qcustomplot.cpp
HEADERS  += mainwindow.h 
qcustomplot.h 
include/dynamixel_sdk.h
FORMS    += mainwindow.ui
win32: LIBS += -L$$PWD/import/ -ldxl_x86_cpp
INCLUDEPATH += $$PWD/import
DEPENDPATH += $$PWD/import

任何帮助都会得到通知。

您收到一个错误-Unresolved External Symbol

这种错误通常意味着某些函数有声明,但没有定义。

示例:

// A.hpp
class A
{
public:
void myFunc(); // Function declaration
};
// A.cpp
// Function definition
void A::myFunc()
{
// do stuff
}

我想我解决了这个问题:这似乎是Qt构建的一个问题。删除我的Qt项目中的构建目录并重新运行qmake就足够了。