通常情况下,我可以通过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。
答案 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论证需要最后。