我和Mingw有问题并且提升。我使用cygwin环境
#include <boost/thread.hpp>
#include <cmath>
int main(){ return 0; }
如果我使用此命令编译,则会出现以下错误
i686-pc-mingw32-g++ -std=c++11 test.cpp -o test.o
test.cpp:1:28: fatal error: boost/thread.hpp: No such file or directory
如果我包含/usr/include
来获取boost / thread.hpp,则似乎包含了错误的cmath标头:
i686-pc-mingw32-g++ -std=c++11 -I/usr/include test.cpp -o test.o
In file included from /usr/lib/gcc/i686-pc-mingw32/4.7.3/include/c++/random:38:0,
from /usr/lib/gcc/i686-pc-mingw32/4.7.3/include/c++/bits/stl_algo.h:67,
from /usr/lib/gcc/i686-pc-mingw32/4.7.3/include/c++/algorithm:63,
from /usr/include/boost/smart_ptr/shared_ptr.hpp:42,
from /usr/include/boost/shared_ptr.hpp:17,
from /usr/include/boost/date_time/time_clock.hpp:17,
from /usr/include/boost/thread/thread_time.hpp:9,
from /usr/include/boost/thread/win32/thread_data.hpp:10,
from /usr/include/boost/thread/thread.hpp:15,
from /usr/include/boost/thread.hpp:13,
from test.cpp:1:
/usr/lib/gcc/i686-pc-mingw32/4.7.3/include/c++/cmath:1046:11: error: '::acoshl' has not been declared
/usr/lib/gcc/i686-pc-mingw32/4.7.3/include/c++/cmath:1050:11: error: '::asinhl' has not been declared
/usr/lib/gcc/i686-pc-mingw32/4.7.3/include/c++/cmath:1054:11: error: '::atanhl' has not been declared
....
我可以在这做什么?
答案 0 :(得分:1)
Mingw和cygwin是两个不同的平台。 Cygwin是一个符合POSIX标准的平台,支持许多UNIX平台上也可以找到的命令。另一方面,mingw是一个编译“纯”Windows应用程序的目标平台,通常用作posix环境(如你的情况:cygwin)的交叉编译器来生成Windows二进制文件。在创建mingw二进制文件时尝试使用cygwin的boost版本类似于在为Mac OS X编译时使用linux版本的boost。您不会期望这样做。
要安装mingw版本的boost,只需下载并解压缩。在boost源目录中调用以下内容:
./bootstrap.sh
现在编辑文件project-config.jam
并将以using gcc
开头的行更改为:
using gcc : : i686-pc-mingw32-g++ ;
然后调用:
./bjam --prefix=/usr/i686-pc-mingw32/usr --layout=system variant=release threading=multi link=shared runtime-link=shared toolset=gcc target-os=windows threadapi=win32 stage
./bjam --prefix=/usr/i686-pc-mingw32/usr --layout=system variant=release threading=multi link=shared runtime-link=shared toolset=gcc target-os=windows threadapi=win32 install
前缀/usr/i686-pc-mingw32/usr
可能在您的设置中出错,因此请检查它是否存在。同时根据您的需要更改threading=multi link=shared runtime-link=shared
的值。
您还可以在Boost - cross compile - "from Linux" "to Windows"
找到有用的评论另外,不忘记删除-I/usr/include
,因为这会让gcc再次使用cygwin的boost版本。