http://www.play21.jp/board/formz.cgi?ac ... &rln=49010
の続きですが、内容が異なっているので新しく立てました。
xercesをインストールしようとしてみましたが、テストコードがリンクエラーになってどうにもなりません
解決策を求めています。
[現状]
1:http://xerces.apache.org/xerces-c/download.cgiから下記のzipファイルをダウンロード&展開をした。
xerces-c-3.1.0.zip
2:xerces-c-3.1.0\projects\Win32\VC8\xerces-all\xerces-all.slnを開きXercesLibのみビルド
ここまではOK。
3:別に新しくプロジェクトを作成[xml.slnとする]
4:xerces-c-3.1.0\tests\src\XSValueTest中のXSValueTest.cpp,XSValueTest.hppをテストコードとして
xml.slnに追加。
5:2でビルドによってでてきたxerces-c_3D.libをxml.slnの追加のライブラリディレクトリから見れるようにする。
6:xerces-c-3.1.0\srcをxml.slnのインクルードディレクトリに追加。
7:xml.slnをコンパイル。
ここでリンクエラーが起きる。
[リンクエラーの内容]
1>------ ビルド開始: プロジェクト: xml, 構成: Debug Win32 ------
1>リンクしています...
1>XSValueTest.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) public: static bool __cdecl xercesc_3_1::XSValue::validate(wchar_t const * const,enum xercesc_3_1::XSValue::DataType,enum xercesc_3_1::XSValue::Status &,enum xercesc_3_1::XSValue::XMLVersion,class xercesc_3_1::MemoryManager * const)" (__imp_?validate@XSValue@xercesc_3_1@@SA_NQB_WW4DataType@12@AAW4Status@12@W4XMLVersion@12@QAVMemoryManager@2@@Z) が関数 "void __cdecl VALIDATE_TEST(char const * const,enum xercesc_3_1::XSValue::DataType,bool,enum xercesc_3_1::XSValue::Status)" (?VALIDATE_TEST@@YAXQBDW4DataType@XSValue@xercesc_3_1@@_NW4Status@23@@Z) で参照されました。
1>XSValueTest.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) public: static class xercesc_3_1::MemoryManager * xercesc_3_1::XMLPlatformUtils::fgMemoryManager" (__imp_?fgMemoryManager@XMLPlatformUtils@xercesc_3_1@@2PAVMemoryManager@2@A)" は未解決です。
...............................................................
........................(中略).........................
...................................
public: static char const * const xercesc_3_1::XMLUni::fgXercescDefaultLocale" (__imp_?fgXercescDefaultLocale@XMLUni@xercesc_3_1@@2QBDB)" は未解決です。
1>D:\cpp\xml\Debug\xml.exe : fatal error LNK1120: 外部参照 63 が未解決です。
1>ビルドログは "file://d:\cpp\xml\xml\Debug\BuildLog.htm" に保存されました。
1>xml - エラー 64、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
[コンパイルオプション]
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Wp64 /ZI /TP /errorReport:prompt
[リンカオプション]
/OUT:"D:\cpp\xml\Debug\xml.exe" /INCREMENTAL /NOLOGO /LIBPATH:"D:\cpp\xml\xml\lib" /MANIFEST /MANIFESTFILE:"Debug\xml.exe.intermediate.manifest" /DEBUG /PDB:"d:\cpp\xml\debug\xml.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
[環境]
Microsoft Visual Studio 2005
Version 8.0.50727.867 (vsvista.050727-8600)
Microsoft .NET Framework
Version 2.0.50727 SP2
インストールされている Edition: Standard
[備考]
自分でコンパイル&ビルドせずに、公開されているバイナリを持ってきても、ほぼ同じエラーがでます。
#導入で何ともならなかったのは初めてです。
#今までは大体パス通すだけでなんとかなったのに。。。。。
xercesのインストール方法
Re:xercesのインストール方法
こちらには、環境がないので、試してないんですけど、
リンカオプションを見たところ、必要なライブラリが指定されてないように見えるので、
そこから調べてみてはいかがでしょう。
表示されているエラーも、リンクエラーの様子ですし。
後、Xerces-C に付いている、サンプルプログラムが動作するかも、確認して
みると良いかと思われます。
リンカオプションを見たところ、必要なライブラリが指定されてないように見えるので、
そこから調べてみてはいかがでしょう。
表示されているエラーも、リンクエラーの様子ですし。
後、Xerces-C に付いている、サンプルプログラムが動作するかも、確認して
みると良いかと思われます。
Re:xercesのインストール方法
> 今までは大体パス通すだけでなんとかなったのに
ここですね、原因は。
オープンソースのライブラリはパスを通すだけで勝手にリンクしてくれるものと
してくれないものがあり、xercesは後者です。
なので、リンカにどの libをリンクするか指定してあげてください。
まぁ VisualC++のようなので、それが面倒なら以下のようなソースをどこかに
(xerces_autolink.cppとか適当に)おいてビルドするのもいいでしょう。
[color=#d0d0ff" face="monospace]
#ifdef _MSC_VER
// デバッグ
#if defined(_DEBUG)
#define XERCES_LIB_DEBUG_OPT "D"
#else
#define XERCES_LIB_DEBUG_OPT
#endif
// CRT
#if defined(_DLL)
#define XERCES_LIB_CRT_OPT
#elif defined(XERCES_STATIC_LIBRARY)
#define XERCES_LIB_CRT_OPT "static_"
#else
#error not defined "XERCES_STATIC_LIBRARY"
#endif
// バージョン
#define XERCES_MJVER "3"
// リンクするライブラリ名
#define XERCES_LIB_LINK_NAME \
"xerces-c_" \
XERCES_LIB_CRT_OPT XERCES_MJVER XERCES_LIB_DEBUG_OPT \
".lib"
// 自動リンク
#pragma comment(lib, XERCES_LIB_LINK_NAME)
// リンクファイル名表示
#if defined(XERCES_LIB_DIAGNOSTIC)
#pragma message("xerces : linking to lib file: " XERCES_LIB_LINK_NAME)
#endif
#endif // _MSC_VER
[/color]
Re:xercesのインストール方法
やんちさん、Justyさん回答ありがとうございます。
リンカに指定することで解決しました。
プロパティ->リンカ->追加の依存ファイルに
debugではxerces-c_3D.lib
Releaseではxerces-c_3.lib
をそれぞれ追加することで解決しました。
ありがとうございます。
リンカに指定することで解決しました。
プロパティ->リンカ->追加の依存ファイルに
debugではxerces-c_3D.lib
Releaseではxerces-c_3.lib
をそれぞれ追加することで解決しました。
ありがとうございます。