“编译器线程支持未打开。”

时间:2011-11-07 21:16:46

标签: linux boost mingw boost-asio boost-thread

通常情况下,我可以通过google方式找到解决方案,但不是这次。

我正在使用64位Linux Ubuntu 11.04来编译32位Windows应用程序。我正在使用i586-mingw32msvc-gcc来编译我的C ++文件。

TEST.CPP:

#include <boost/asio.hpp>

生成文件:

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

错误:

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

添加到makefile:-DBOOST_WINDOWS

Error:
#   warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately

好的,添加到makefile:-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 个答案:

答案 0 :(得分:3)

添加-DBOOST_HAS_THREADS可能就足够了(请参阅offending header中的# elif defined __GNUC__)。但是,您的boost安装可能/可能是为了支持您的构建环境而不是您的目标。尝试使用交叉编译工具链building it yourself

答案 1 :(得分:1)

事实证明,我有一套#undef和#defines强制GLIBC版本允许我编译Linux(而不是交叉编译)RHEL5,否则会给我各种其他错误。事实证明,当使用mingw对windows进行交叉编译时,强制提供GLIBC版本会导致提升采取一条奇怪的路径,使各个方面保持不确定,包括行为或线程的可用性。我用#ifndef _WIN32包围了它,这让问题消失了。

答案 2 :(得分:0)

也许--mthreads论证需要最后。