我想建立一個DLL以及我的程序在C++中。該dll將是一個基礎庫,包含一系列可繼承的類和一般實用程序,然後可以由最終產品附帶的多個其他應用程序動態使用(A遊戲)。我把東西扔在一起,只是發現我收到我瘋狂的錯誤。這是着名的「錯誤LNK2019:無法解析的外部符號」。首先,我已經找到了解決辦法,以下是鏈接:Unresolved External Symbol- Error in guide?討厭的DLL問題(無法解析的外部符號)
所選答案有效。 如果我只將我的類放入一個頭文件,它編譯得非常好,運行,並且非常漂亮。但是,我希望將聲明和實現分開,如果我嘗試將實現移至單獨的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
它會工作。我想再次聲明和實施是分開的。
下面是我使用單獨聲明和實現時的構建報告。
哪個符號未解決? – 2014-11-22 07:11:08
@JonathanPotter我認爲我的評論被刪除了......我添加了一個鏈接到構建輸出到我的帖子的底部讓你看看。 – Krythic 2014-11-22 07:22:20
你的問題是頭文件中類的declspec。您不會有條件地爲您的DLL的*消費者*使用'__declspec(dllimport)'。有一個默認的DLL項目聲明宏來處理這個問題的原因。您的錯誤日誌沒有鏈接DLL的問題;它是*客戶*找不到符號。 – WhozCraig 2014-11-22 07:59:10