明道增加了路径包含的困境

时间:2013-08-06 12:57:02

标签: c++ boost cygwin mingw boost-thread

我和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
....

我可以在这做什么?

1 个答案:

答案 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版本。