«Поддержка потоков компилятора не включена». - PullRequest
6 голосов
/ 08 ноября 2011

Обычно я могу гуглить и находить решения, но не в этот раз.

Я использую 64-битную Linux Ubuntu 11.04 для компиляции 32-битного приложения Windows.Я использую i586-mingw32msvc-gcc для компиляции моих файлов C ++.

test.cpp:

#include <boost/asio.hpp>

makefile:

i586-mingw32msvc-gcc -c -m32 -mthreads -o test.o test.cpp

Ошибка:

boost/asio/detail/socket_types.hpp:
# include <sys/ioctl.h>
doesn't exist.

Добавлено в make-файл: -DBOOST_WINDOWS

Error:
#   warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately

Хорошо, добавлено в make-файл: -D_WIN32_WINNT = 0x0501

Error:
#   error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)"

Пока я сделал указать-mthreads.

Ответы [ 3 ]

3 голосов
/ 08 ноября 2011

Добавление -DBOOST_HAS_THREADS может быть достаточным (см. # elif defined __GNUC__ из заголовка нарушителя ).Но вероятно / возможно, что ваша буст-инсталляция была создана для поддержки вашей среды сборки, а не вашей цели.Попробуйте собрать его самостоятельно с помощью набора инструментов для кросс-компиляции.

1 голос
/ 17 ноября 2011

Оказалось, что у меня есть набор #undef и #defines, чтобы заставить версию GLIBC сделать что-то такое, что позволило мне компилировать для Linux (не кросс-компиляцию) RHEL5, что в противном случае могло бы привести ко всем другим ошибкам. Оказывается, что при кросс-компиляции для окон, использующих mingw, эта принудительная подача версии GLIBC приводит к тому, что boost принимает странный путь, оставляя различные аспекты неопределенными, включая поведение или доступность потоков. Я окружил его #ifndef _WIN32, который решил проблему.

0 голосов
/ 08 ноября 2011

Может быть, аргумент -mthreads должен стоять последним.

...