5

長い間解決しようとしてきた問題があります。

Visual C++ でスタティック ライブラリ プロジェクトがあり、別のプロジェクトがそれにリンクできるようにしたいと考えています。これまでは、ライブラリを自動的にリンクする静的ライブラリ プロジェクトへの参照を追加するだけでした。

ヘッダー ファイルと .lib ファイルのみを使用してライブラリにリンクできるようにしたいと考えています。ただし、「未解決の外部シンボル」エラーが発生します。

私はそれを正しくやっていると思っていました-インクルードディレクトリ、ライブラリディレクトリを指定し、リンカー入力プロパティに入り、追加の依存関係としてlibを提供しました。

この方法で (SDL などの) 他の静的ライブラリを参照できますが、参照しようとするとエラーが発生するのはなぜですか?

助けてくれてありがとう。

実際のlibファイルを参照していないという問題ですか、それともlib自体に何かありますか? これらは私が得るエラーメッセージです:

エラー 2 エラー LNK2019: 未解決の外部シンボル "public: void __thiscall XEngine::XCore::XScreen::init(class XEngine::XCore::XGame &)" (?init@XScreen@XCore@XEngine@@QAEXAAVXGame@23@ @Z) 関数 "void __cdecl XEngine::XEngineInit(class XEngine::XCore::XScreen &,class XEngine::XCore::XGame &)" で参照 (?XEngineInit@XEngine@@YAXAAVXScreen@XCore@1@AAVXGame@ 31@@Z) C:\Users\Xander Masotto\Documents\Visual Studio 2010\Projects\Pong\Pong\source.obj ポン

エラー 3 エラー LNK2019: 未解決の外部シンボル "public: __thiscall XEngine::XCore::XScreen::~XScreen(void)" (??1XScreen@XCore@XEngine@@QAE@XZ) が関数 "void __cdecl XEngine:: で参照されています。 XEngineInit(class XEngine::XCore::XGame &)" (?XEngineInit@XEngine@@YAXAAVXGame@XCore@1@@Z) C:\Users\Xander Masotto\Documents\Visual Studio 2010\Projects\Pong\Pong\source .objポン

エラー 4 エラー LNK2019: 未解決の外部シンボル "public: __thiscall XEngine::XCore::XScreen::XScreen(void)" (??0XScreen@XCore@XEngine@@QAE@XZ) が関数 "void __cdecl XEngine::XEngineInit で参照されています(class XEngine::XCore::XGame &)" (?XEngineInit@XEngine@@YAXAAVXGame@XCore@1@@Z) C:\Users\Xander Masotto\Documents\Visual Studio 2010\Projects\Pong\Pong\source. objポン

4

1 に答える 1

4

他のアプリケーション (つまり、dll または exe) に公開したいライブラリ内の関数、クラス、および変数をエクスポートしていることを確認してください。デフォルトでは、それらは公開されていません。

これを行うための基本的な作業は、通常、ライブラリのプロジェクトを作成するときにレイアウトされます。

#ifdef TESTLIB_EXPORTS
#define TESTLIB_API __declspec(dllexport)
#else
#define TESTLIB_API __declspec(dllimport)
#endif

プロジェクトの作成中に生成された上記のコードを使用して、関数、クラス、または変数を公開するために行うべきことはあと 2 つだけです。

1) TESTLIB_EXPORTS がプリプロセッサとして定義されていることを確認します。プロジェクト設定: C++/Preprocessor/PreprocessorDefinitions

2)公開したい各関数、クラス、または変数で TESTLIB_API 定義を使用します。

class TESTLIB_API Order {
    void doSomething();
};
于 2010-09-09T22:46:47.247 に答える