3

私の問題はこれと非常によく似ています: DLL内のクラスには静的メンバーがあります。この場合、静的メンバーはQString型(QT 型) であり、クラスの名前を提供します。クラスレベルで通常のエクスポートを提供します: __declspec(dllexport).

クラスを含む DLL を別のプロジェクトにリンクしてコンパイルしようとすると、静的データに対して「未解決の外部シンボル」エラーが発生します。以下の2点を確認しました。

  1. Dumpbinは、コンパイルされた DLL によってエクスポートされる静的データ メンバーを確実に報告します。
  2. 実際、エラーを報告するアプリケーションでは、静的データ メンバは使用されていないようです。

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>
4

1 に答える 1