除两个构造函数外,C ++ lib导入工作

时间:2017-02-13 18:04:05

标签: c++ qt dll dllimport

我正在用第三方dll(dynamixel_sdk)写一个pogram。我在visual studio中实现了它,工作正常。现在我试图将代码移植到Qt以包裹它周围的gui。

dll的包含工作正常。它显示并自动填充我编写的任何函数和对象并编译我的代码没有任何问题,但是当我尝试构造两个必要的Obejects时,我得到了这个错误:

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确实存在问题,因为它适用于visual studio。 到目前为止,我尝试了不同的declereations:作为成员变量,在main函数中,作为成员函数中的变量,但似乎没有任何工作。我还尝试将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

Functioncall:

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

任何帮助都是适当的。

2 个答案:

答案 0 :(得分:1)

您收到了错误消息 - Unresolved External Symbol

此错误通常意味着某些函数具有声明,但不具有定义。

示例:

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

// A.cpp

// Function definition
void A::myFunc()
{
  // do stuff
}

答案 1 :(得分:0)

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