私の問題はこれと非常によく似ています: DLL内のクラスには静的メンバーがあります。この場合、静的メンバーはQString型(QT 型) であり、クラスの名前を提供します。クラスレベルで通常のエクスポートを提供します: __declspec(dllexport)
.
クラスを含む DLL を別のプロジェクトにリンクしてコンパイルしようとすると、静的データに対して「未解決の外部シンボル」エラーが発生します。以下の2点を確認しました。
- Dumpbinは、コンパイルされた DLL によってエクスポートされる静的データ メンバーを確実に報告します。
- 実際、エラーを報告するアプリケーションでは、静的データ メンバは使用されていないようです。
DLL の HEADER ファイル (.h) は次のとおりです。
class __declspec(dllexport) MyClass {
public:
virtual ~MyClass();
static const QString JUST_A_NAME;
};
DLL の IMPLEMENTATION ファイル (.cpp) は次のとおりです。
#include "MyClass.h"
MyClass::~MyClass() { }
const QString MyClass::JUST_A_NAME("call_me_al");
前述の投稿とは対照的に、メソッドをインラインにすることは避けました。たとえば、実装は明らかにヘッダーにありません。QString型(83 行目以降を参照) には、それ自体にいくつかのインラインが含まれています。それはエラーを引き起こす可能性がありますか?
編集:アプリケーションのヘッダーに import ステートメントを追加しました。インクルードの前に配置されます。 APPLICATION の HEADER ファイル (.h) は次のとおりです。
class __declspec(dllimport) MyClass {
public:
virtual ~MyClass();
static const QString JUST_A_NAME;
};
エラーは同じままです:
error LNK2001: non resolved external symbol ""public: static class QString const MyClass::JUST_A_NAME" (?JUST_A_NAME@MyClass@@2VQString@@B)". <name of .obj file from application>