1

アプリケーションをライブラリとして構築していますが、必要な出力が確実に得られるようにするために、exe を生成するように切り替えました。実行するとすぐに、未解決の外部シンボルに関するいくつかのエラーが発生しました。

最初は、参照しているサードパーティのライブラリへのパスが設定されていないと思ったので、フォルダーをパス変数に追加し、インクルード、参照、およびソース ファイルにも追加しました。私はすべての道を持っていました。

私はまだエラーが発生します:

エラー LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: static void __cdecl xercesc_2_8::XMLPlatformUtils::Initialize(char const * const,char const * const,class xercesc_2_8::PanicHandler * const,class xercesc_2_8::MemoryManager * const, bool)」(__imp_?Initialize@XMLPlatformUtils@xercesc_2_8@@SAXQBD0QAVPanicHandler@2@QAVMemoryManager@2@_N@Z) 関数「void __cdecl xsd::cxx::xml::initialize(void)」で参照 (?initialize@xml @cxx@xsd@@YAXXZ)

ここで質問している理由は、Visual Studio でライブラリとしてビルドしたときにこれらのエラーが発生しなかったためですが、dll および exe としては発生します。

誰か考えはありますか?

4

3 に答える 3

2

ライブラリを構築する場合、リンカはインポートされたシンボルを解決する必要はありません。これは、オブジェクトファイルとライブラリのリンクを開始したときにのみ発生します。

そのため、実行可能ファイルをビルドするときにエラーが表示されるようになりました。

実際、VC2008(および私がよく覚えている場合は2005)では、プロジェクトのプロパティ->リンカー->入力->追加の依存関係を使用します。必要なライブラリはスペースで区切る必要があります(奇妙な、ねえ?)

幸運を!

于 2008-10-03T18:50:03.943 に答える
2

また、特にそのライブラリにリンクすることを指定する必要があります。リンク パスは、何を探すかではなく、見つける必要のあるデータがどこにあるかをリンカに伝えるだけです。また、問題のライブラリ (xerces?) に対してリンクしていることを指定する必要があります。

残念ながら、MSVC でこれを指定する方法はわかりませんが、おそらく「リンカー オプション」の下のどこかにあるでしょう。

于 2008-10-03T18:35:58.513 に答える
0

@copproが言ったように、そのライブラリとリンクすることを指定する必要があります。EXEまたはDLLをビルドすると、リンカーが実行され、使用しているすべての関数を見つける必要がありますが、ライブラリをビルドするには、ライブラリアンが実行され、すべての関数参照を解決する必要はありません(ただし、そのライブラリをEXEで使用する場合は、再度使用する必要があります)。

したがって、プロジェクトのオプション、リンカーオプション、入力に移動し、不足している関数を定義するライブラリ(xerces.lib?)を[追加のライブラリパス]の下に一覧表示します。追加のライブラリパスの下にその場所を追加する必要がある場合があります。

于 2008-10-03T18:52:23.737 に答える