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;
}