среда, 29 февраля 2012 г.

Потоки C++: boost::thread error LNK2001 boost::exception_ptr

Непонятный заголовок, т.к. речь пойдёт о такой же непонятной ошибке С++, возникающей при работе с потоками (нитями) boost::thread.

Компилятор MS Visual C++ 2010, Boost 1.49.

В Интернете встречаются обсуждения, но решения проблемы я не нашёл. Как выглядит, пример:
1>World.obj : error LNK2001: неразрешенный внешний символ
    public: static class boost::exception_ptr const \
        boost::exception_detail\
        ::exception_ptr_static_exception_object::e \
        (?e@?$exception_ptr_static_exception_object\
         @Ubad_alloc_@exception_detail@boost\
         @@@exception_detail@boost@@2Vexception_ptr@3@B)

Как исправить.

Вариант I. Не использовать предварительно откомпилированный заголовок. Это удобное решение для маленького проекта. Когда проект большой, заметны последствия: время компиляции значительно увеличивается.

Вариант II. Переместить
#include <boost/thread.hpp>
из файла предварительно откомпилированного заголовка в файлы, где используются потоки. Больше движений, но без последствий для проектов любого размера.

2 комментария:

Анонимный комментирует...

В чем причина так и не понятно?

Andrii комментирует...

В моём случае не было потребности копать глубже.