Pergunta

Eu só descobri que quando as extensões de linguagem estão desativados em MSVC, você receber esse erro se você tentar incluir boost/thread/thread.hpp:

erro fatal C1189: #Error: "O apoio de Threading unavaliable: ele foi desativado explicitamente com BOOST_DISABLE_THREADS"

Parece que quando detecta impulso que extensões de linguagem estão desativados (_MSC_EXTENSIONS não está definido), eles definem BOOST_DISABLE_WIN32, para indicar que não é seguro para incluir windows.h (que não irá compilar sem extensões habilitado).

E como consequência da que #define, BOOST_DISABLE_THREADS é definido, embora Boost.Thread não é uma biblioteca somente cabeçalho e windows.h só está incluído nos arquivos .cpp. Os cabeçalhos devem, em princípio, ser seguro para uso sem extensões de linguagem. Todas as chamadas Win32 reais são isolados na biblioteca compilado (arquivo .dll ou .lib)

Eu posso ver aqui que eles estão cientes do problema, mas como está permaneceu intocada durante os últimos dois anos, provavelmente é ingênuo esperança de uma solução rápida.

Parece que ele deve ser um caso bastante simples de modificar alguns dos do #ifdef e #defines nos vários arquivos de configuração Boost, mas há um monte deles, e eles definir e usar um monte de macros cuja finalidade não é claro para mim.

Do Alguém sabe de um hack simples ou solução alternativa para permitir a inclusão dos cabeçalhos Boost.Thread quando extensões de linguagem estão desativados?

Foi útil?

Solução

Eu não vejo nenhuma maneira simples de desligar o comportamento.

Você poderia envolver o bloco com o seu próprio #ifdef a partir de boost \ config \ suffix.hpp (214):

#ifndef TEMP_HACK_DONT_DISABLE_WIN32_THREADS // XXX TODO FIXME

#if defined(BOOST_DISABLE_WIN32) && defined(_WIN32) \
   && !defined(BOOST_DISABLE_THREADS) && !defined(BOOST_HAS_PTHREADS)
#  define BOOST_DISABLE_THREADS
#endif

#endif // ndef TEMP_HACK_DONT_DISABLE_WIN32_THREADS

não uma solução perfeita, mas deve ser temporária até que você pode obtê-los para corrigi-lo a montante. O material impulso é bom, mas não é imutável em sua perfeição.

É claro, fazer algum tipo de artigo que segue, então você faz pista não perder de sua divergência de montante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top