除了两个构造函数外,C++库导入也可以工作
C++ lib import works except for two constructors
我正在用第三方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就足够了。
相关文章:
- 尝试导入pybind-opencv模块时出现libgtk错误
- 导入库可以跨dll版本工作吗
- 建议在运行时将带有类实例的列表从c++导入qml
- 导入/导出变量时出错
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- 是否可以将函数导入命名空间,但不能导出它?
- 如何将 CLion C++ 项目导入 Visual Studio?
- Python 3.8 不能与 Pybind11 一起导入 [Windows]
- 无法将标准库导入本机 android 项目中的头文件
- 尝试了解在导入的静态方法上使用删除方法时的错误
- 在 python 模块中导入子模块时PyImport_Import失败
- 将 C# DLL 导入 C++ 以用于 JNI
- 使用 QSslCertificate 在 Qt 中正确导入 pkcs12
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 编译boost_python扩展无法在 python 2.7 中导入
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- Dll在同一解决方案中从 c# 项目导入到 c++ 项目
- C++20 使用 Visual Studio 编译模块:不编译或导入 ixx 文件
- 我可以将cocos项目导入虚幻4吗?