monolithic kernel

VC++ 2010 ExpressでPOCOをビルドする

May 01, 2010

    POCO 1.4.0ではこの問題は修正されているそうです。

    VC++ 2010 ExpressでPOCO 1.3.6p2をビルドしてみました。 基本的にはVC9向けの.slnファイルを変換してビルドしていけば問題ありませんが、Foundationのビルド時にエラーが起きるのでメモしておきます。

    ThreadLocal.cppの修正

    オリジナルでは73行目でTLSMap::valuetype(key, 0)としてpairを生成しようとしていますが、0が数値と解釈されてしまいエラーになっているようです。そこで、以下のようにreinterpretcastをかましてやるとTLSAbstractSlotのポインタとして扱われるようになり、無事にビルドできます。

    TLSAbstractSlot*& ThreadLocalStorage::get(const void* key)
    {
    	TLSMap::iterator it = _map.find(key);
    	if (it == _map.end())
    		return _map.insert(TLSMap::value_type(key, reinterpret_cast<TLSAbstractSlot>(0))).first->second;
    	else
    		return it->second;
    }