こんにちは、Windows 7 で既に 32 ビットでビルドされているプロジェクトを 64 ビットにアップグレードしようとしています。この xerces 2_7 dll がアプリケーションで使用されているため、xerces2_7_0 バージョンのソース コードをダウンロードし、ライブラリを 64 ビットでビルドします。ここまでは問題ありません。しかし、このライブラリを自分のプロジェクトにフックしようとすると、リンカー エラーがスローされます。以下はエラーです
error LNK2019: unresolved external symbol "__declspec(dllimport) public: static bool __cdecl xercesc_2_7::DOMImplementation::loadDOMExceptionMsg(enum xercesc_2_7::DOMException::ExceptionCode,unsigned short * const,unsigned int)" (__imp_?loadDOMExceptionMsg@DOMImplementation@xercesc_2_7@@SA_NW4ExceptionCode@DOMException@2@QEAGI@Z) referenced in function "int `private: bool __cdecl
error LNK2001: unresolved external symbol "__declspec(dllimport) public: static unsigned short const * const xercesc_2_7::XMLUni::fgDOMDatatypeNormalization" (__imp_?fgDOMDatatypeNormalization@XMLUni@xercesc_2_7@@2QBGB)
error LNK2001: unresolved external symbol "__declspec(dllimport) public: static unsigned short const * const xercesc_2_7::XMLUni::fgDOMValidateIfSchema" (__imp_?fgDOMValidateIfSchema@XMLUni@xercesc_2_7@@2QBGB)
error LNK2001: unresolved external symbol "__declspec(dllimport) public: static unsigned short const * const xercesc_2_7::XMLUni::fgXercesSchemaFullChecking" (__imp_?fgXercesSchemaFullChecking@XMLUni@xercesc_2_7@@2QBGB)
error LNK2001: unresolved external symbol "__declspec(dllimport) public: static unsigned short const * const xercesc_2_7::XMLUni::fgXercesSchema" (__imp_?fgXercesSchema@XMLUni@xercesc_2_7@@2QBGB)
error LNK2001: unresolved external symbol "__declspec(dllimport) public: static unsigned short const * const xercesc_2_7::XMLUni::fgDOMNamespaces" (__imp_?fgDOMNamespaces@XMLUni@xercesc_2_7@@2QBGB)
error LNK2019: unresolved external symbol "__declspec(dllimport) public: static class xercesc_2_7::DOMImplementation * __cdecl xercesc_2_7::DOMImplementationRegistry::getDOMImplementation(unsigned short const *)" (__imp_?getDOMImplementation@DOMImplementationRegistry@xercesc_2_7@@SAPEAVDOMImplementation@2@PEBG@Z) referenced in function "private: bool __cdecl
そのため、この xerces 2_7_0 を本当に 64 ビットでビルドし、テスト プロジェクトを 64 ビット コンソール アプリケーションとして作成し、この xerces ライブラリをフックしてプロジェクトを正常にビルドできるかどうか疑問に思いました (プロジェクトで行っているのと同じ呼び出しセットを使用しました)。
依存関係ウォーカーを使用して、すべての依存関係を確認しました。64 ビット xerces dll で依存関係ウォーカーを試したところ、ファイルを開くときにエラーが見つかりました。以下にエラーを示します。
Error: The Side-by-Side configuration information for "c:\users\vivek\desktop\xerces64bit\x64\debug\XERCES64BIT.EXE" contains errors. The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail (14001).
Error: At least one required implicit or forwarded dependency was not found.
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Error: Modules with different CPU types were found.
私が間違っていることと、64ビットのテストアプリケーションで何も文句を言わなかった理由を教えてください。ところで、私はVisual Studio 2008を使用しています。ありがとう
Update 1:
ここで、依存関係ウォーカーのエラーを 2 に減らしました
Error: The Side-by-Side configuration information for "c:\users\vivek\desktop\xerces64bit\x64\debug\XERCES64BIT.EXE" contains errors. The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail (14001).
Error: At least one required implicit or forwarded dependency was not found.
他の 2 つのエラーは、私が使用している依存関係ウォーカーが 32 ビットの実行可能ファイルであったためです。現在、64 ビットの依存関係ウォーカーを使用していますが、それでも 2 つのエラーが表示されます。
Update 2:
CRT を /MT に変更することで、2 つのエラーを取り除きました。しかし、まだこのライブラリをプロジェクトにリンクできません。