恼人的DLL问题(未解析的外部符号)

时间:2014-11-22 07:05:14

标签: c++ dll visual-studio-2013

我正在尝试构建一个dll,以便在c ++中使用我的程序。 dll将是一个带有一堆可继承类和通用实用程序的基本库,然后可以由最终产品(A Game)附带的多个其他应用程序动态使用。我把东西扔在一起,却发现我收到了令人抓狂的错误。这是着名的“错误LNK2019:未解析的外部符号”。首先,我已经找到了解决方案,这里是链接:Unresolved External Symbol- Error in guide?

选择的答案有效。 如果我将我的类放入一个头文件中,它编译得非常好,运行,并且非常漂亮。但是,我想保持声明和实现是分开的,如果我尝试将实现移动到单独的cpp,我会收到LNK2019错误。这是由于某种内联,我只是想知道我是怎么做的在我开始撕掉我的头发之前,我可以用它来修复它。

任何人都可以帮我吗?这是我的班级:

部首:

#ifndef MYDLLTESTCLASS_H
#define MYDLLTESTCLASS_H
class __declspec( dllexport ) MyDLLTestClass {
    public:
    MyDLLTestClass();
    void setX( int x );
    int getX();
    private:
    int x;
};
#endif // MYDLLTESTCLASS_H

CPP:

#include "MyDLLTestClass.h"

MyDLLTestClass::MyDLLTestClass() {

}

void MyDLLTestClass::setX( int x ) {
    this->x = x;
}

int MyDLLTestClass::getX() {
    return x;
}

如上所述,代码不会编译。但是,如果我将声明和实现放在一起它是有效的,所以如果我这样做:

#ifndef MYDLLTESTCLASS_H
#define MYDLLTESTCLASS_H
class __declspec( dllexport ) MyDLLTestClass {
    public:
    MyDLLTestClass();
    void setX( int x );
    int getX();
    private:
    int x;
};


MyDLLTestClass::MyDLLTestClass() {

}

void MyDLLTestClass::setX( int x ) {
    this->x = x;
}

int MyDLLTestClass::getX() {
    return x;
}
#endif // MYDLLTESTCLASS_H

它会起作用。同样,我希望声明和实现分开。

当我使用单独的声明和实现时,这是构建报告。

http://pastebin.com/HMEpeEgn

1 个答案:

答案 0 :(得分:0)

这实际上比我意识到的要容易得多;事实证明这是一个视觉工作室一直在设置。首先,您需要将dll项目添加到当前项目(将使用它)。然后你需要右键点击你当前的项目并按照这两张图片:

enter image description here

然后添加你的dll,可能只需要进行检查标记(我只是错过了复选标记)。

enter image description here

之后你的项目编译得很好!不需要像每个网页都试图描绘的那样令人讨厌的#ifndef宏(这也不会让你着想)