当前位置: 代码迷 >> QT开发 >> qt创建的dll摘引失败
  详细解决方案

qt创建的dll摘引失败

热度:187   发布时间:2016-04-25 03:07:38.0
qt创建的dll引用失败
本帖最后由 maliang351 于 2014-11-16 17:08:49 编辑
我在qt下建了个dll,然后在qt下调用失败,但是在vs里可以成功。
开发环境是qt 4.8.4,qt creator 2.7.1,编译器是microsoft visual c++ 10.0(x86)。使用的vs是vs 2010。
测试的dll是十分简单的那种,就在h文件里添加了一行:
#ifndef QTDLL_H
#define QTDLL_H

#include "qtdll_global.h"

class QTDLLSHARED_EXPORT Qtdll
{
    
public:
    Qtdll();

    void helloWorld();  // 添加一个函数
};

#endif // QTDLL_H

对应的cpp文件如下:
#include "qtdll.h"
#include <iostream>

Qtdll::Qtdll()
{
    std::cout << "qtdll construct" << std::endl;
}

void Qtdll::helloWorld()
{
    std::cout << "hello world" << std::endl;
}

在qt下建立控制台工程,.pro文件中添加INCLUDEPATH和LIBS,如下:
INCLUDEPATH += "C:/Users/Mali Ang/Desktop/Graduating/QT_Projects/qtdll"
LIBS += -L"C:/Users/Mali Ang/Desktop/Graduating/QT_Projects/build-qtdll-Desktop-Debug/debug/qtdll.lib"

控制台的cpp文件如下:
#include <QCoreApplication>
#include "qtdll.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    Qtdll m;        // 
    m.helloWorld(); // 调用dll里面的函数

    return a.exec();
}

同时把生成的dll复制到控制台工程debug文件夹里(也尝试过复制到qt 4.8.4/bin文件夹下,或者复制到c:/windows/System32(或者c:/windows/system)文件夹下)。
编译的时候报错:
LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall Qtdll::helloWorld(void)" (__imp_?helloWorld@Qtdll@@QAEXXZ) referenced in function _main
 LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall Qtdll::Qtdll(void)" (__imp_??0Qtdll@@QAE@XZ) referenced in function _main
LNK1120: 2 unresolved externals。

关于添加dll,网上也看了很多,多数的步骤都是这么写的:在控制台工程中修改pro文件,再把dll复制过去。我想知道这个link error是怎么回事,感觉不应该。纠结好多天了。
另外,我在vs里也建了个dll工程,也是在class中添加了一个函数,我也使用vs dumpbin查看过,qt生成的dll函数的命名是和vs新建的dll命名规则一致的。
------解决思路----------------------
LIBS += -L"C:/Users/Mali Ang/Desktop/Graduating/QT_Projects/build-qtdll-Desktop-Debug/debug/qtdll.lib"
改成这样
LIBS += -L"C:/Users/Mali Ang/Desktop/Graduating/QT_Projects/build-qtdll-Desktop-Debug/debug/"
LIBS += -lqtdll
  相关解决方案