boost::serialization をワイド文字で使用する場合について

[戻る]
Takahashi 2005/08/13(土) 22:57:43
環境 Windows XP SP2, VC.NET 2003, コンソール

boost::serialization についての質問です。

ttp://hw001.gate01.com/eggplant/tcf/cpp/boost_serialization.html

のページを参考にワイド文字ではない XML(UTF-8) での保存は出来ました。
次にワイド文字にしようと以下のようなテストコードを書きコンパイルすると
リンクエラーが表示されコンパイルが出来ませんでした。

<テストコード>

#include "stdafx.h"

#include <fstream>

#include <boost/serialization/nvp.hpp>

#include <boost/archive/xml_woarchive.hpp>
#include <boost/archive/xml_wiarchive.hpp>

#define BOOST_LIB_NAME boost_serialization
#include <boost/config/auto_link.hpp>

#define BOOST_LIB_NAME boost_wserialization
#include <boost/config/auto_link.hpp>

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    std::wofstream ofs("c:\\test.xml");
    if(!ofs)    return 2;

    boost::archive::xml_woarchive ar(ofs);

    int i = 10;
    ar << boost::serialization::make_nvp("Test", i);

    return 0;
}

<エラーの内容>

リンクしています...
TestXML2.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall
boost::archive::xml_woarchive_impl<class
boost::archive::xml_woarchive>::xml_woarchive_impl<class
boost::archive::xml_woarchive>(class std::basic_ostream<unsigned short,struct
std::char_traits<unsigned short> > &,unsigned int)"
(??0?$xml_woarchive_impl@Vxml_woarchive@archive@boost@@@archive@boost@@QAE@AAV?$basic_ostream@GU?$char_traits@G@std@@@std@@I@Z)
が関数 "public: __thiscall boost::archive::xml_woarchive::xml_woarchive(class
std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >
&,unsigned int)"
(??0xml_woarchive@archive@boost@@QAE@AAV?$basic_ostream@GU?$char_traits@G@std@@@std@@I@Z)
で参照されました。
TestXML2.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall
boost::archive::basic_text_oprimitive<class std::basic_ostream<unsigned
short,struct std::char_traits<unsigned short> > >::~basic_text_oprimitive<class
std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >
>(void)"
(??1?$basic_text_oprimitive@V?$basic_ostream@GU?$char_traits@G@std@@@std@@@archive@boost@@QAE@XZ)
が関数 "public: virtual __thiscall boost::archive::xml_woarchive_impl<class
boost::archive::xml_woarchive>::~xml_woarchive_impl<class
boost::archive::xml_woarchive>(void)"
(??1?$xml_woarchive_impl@Vxml_woarchive@archive@boost@@@archive@boost@@UAE@XZ)
で参照されました。
Debug/TestXML2.exe : fatal error LNK1120: 外部参照 2 が未解決です。

#長くてすいません

何かライブラリのリンクが足りないのはわかるのですが、
いろいろ調べてもいまいちわからず質問いたしました。

参考ページ(出来れば日本語)、ご指摘等よろしくご教授お願いいたします。

επιστημη [E-Mail] 2005/08/14(日) 18:22:55
wchar_tをunsigned short扱いにしてるフシがあります。
コンパイル・オプションに /Zc:wchar_t が付いてるか、確認してください。
# これで解決するか、自信はありませんけど

Takahashi 2005/08/14(日) 19:15:35
[[解決]]
επιστημηさんレスありがとうございます。

ご指摘通り /Zc:wchar_t オプションをつけたところあっさり解決いたしました。
ありがとうございます。

# さすがというか・・・私の場合ライブラリリンク関係と勝手に思いこんでいたのもあ
りますが、
# ぶっちゃけ全くわからなかった・・・

ところで、ワイド文字にしたところで、相変わらず encoding="UTF-8" ちょっと期待はず
れかな。
しかし、タグに全角文字が指定できるのでかなり使い勝手は向上しますね。
正規の XML じゃないけど、趣味のプログラムで設定ファイルに使うとかでは、便利に使
えそうです。

どうもありがとうございました。

επιστημη [E-Mail] 2005/08/14(日) 20:38:56
おぉぉ、どんぴしゃ。偉いぞ自分 (^^

古いスレッドには追加発言できません。