2017-02-13 29 views
0

Я пишу пограмму с третьей стороной dll (dynamixel_sdk). Я реализовал его в visual studio, который отлично работает. Прямо сейчас я пытаюсь передать код в Qt, чтобы обернуть вокруг него gui.C++ lib импортные работы, за исключением двух конструкторов

Вложение DLL прекрасно работает. Это показывает и autocompletes мне любую функции и объекта я пишу и компилирует свой код без каких-либо проблем, но когда я пытаюсь построить два основных Obejects я получаю эту ошибку:

mainwindow.obj:-1: Fehler: LNK2019: unresolved external symbol "__declspec(dllimport) public: static class dynamixel::PacketHandler * __cdecl dynamixel::PacketHandler::getPacketHandler(float)" ([email protected]@[email protected]@[email protected]@Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" ([email protected]@[email protected]@@@Z) 

mainwindow.obj:-1: Fehler: LNK2019: unresolved external symbol "__declspec(dllimport) public: static class dynamixel::PortHandler * __cdecl dynamixel::PortHandler::getPortHandler(char const *)" ([email protected]@[email protected]@[email protected]@Z) referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" ([email protected]@[email protected]@@@Z) 

Afte довольно много Google шлифование сути была Я импортировал его неправильно или я сделал ошибку, написав dll. Насколько мне известно, не может быть проблемы с DLL, потому что она работает с визуальной студией. До сих пор я пробовал разные декларации: как переменную-член, в основной функции и как переменную в функции-члене, но ничего не работает. Я также попытался включить все заголовки dll seperatly.

Я только начал использовать 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); 
} 

Lib импорта в файл .pro:

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 

Любая помощь appriciated.

+0

Просьба указать код, который использовался для построения классов. –

+0

Мне просто нужно вызвать эти функции, чтобы получить указатель на них. 'portHandler = PortHandler :: getPortHandler ("COM0");' ' packetHandler = acketHandler :: getPacketHandler (protocol_version);' – Delet0r

+0

Я думаю, вы должны указать ссылку на библиотеку импорта для dynamixel_sdk. Не уверен, почему вы разместили столько несвязанного кода. – drescherjm

ответ

0

Я думаю, что я решил эту проблему: он apperas, была проблема со сборкой Qt. Этого достаточно, чтобы удалить каталог сборки в моем проекте Qt и повторить qmake.

1

Вы получили ошибку - Unresolved External Symbol.

Эта ошибка часто означает, что некоторая функция имеет декларацию, но не определение.

Пример:

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

// A.cpp 

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

Эти функции определены в dll третьей стороны. Я просто использую их. В моем проекте VisualStudio я просто использовал их так же. – Delet0r

+0

Любой дефектный импорт? –

+0

Нет, я импортировал dll с функцией импорта Qt, которая устанавливает команды include для lib в файле .pro. Dll ist в моем рабочем каталоге, и заголовок также включен. Сначала я портировал свои функции и скомпилировал их, чтобы проверить, работает ли ссылка, и что она делает. После этого я объявил указатель на объекты и назвал функции построения. Это была первая ошибка. – Delet0r