MinGW包含路径冲突

时间:2014-07-29 21:42:43

标签: c++ mingw mingw-w64

我正在尝试使用MinGW-w64在Linux for Win64上进行交叉编译。这是我的代码

#include <cstdlib>
#include <iostream>

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>

int main(int argc, char** argv)
{
    if (argc > 1)
        std::cout << std::atoi(argv[1]) << std::endl;

    std::cout << boost::uuids::random_generator()() << std::endl;

    return 0;
}

简单编译失败,错误

$ x86_64-w64-mingw32-c++ hello.cpp
hello.cpp:4:31: fatal error: boost/uuid/uuid.hpp: No such file or directory
 #include <boost/uuid/uuid.hpp>
                               ^

Boost安装在/usr/include中,显然MinGW编译器不会搜索。如果我添加该路径,那么......

$ x86_64-w64-mingw32-c++ -I/usr/include hello.cpp
In file included from /usr/include/stdlib.h:314:0,
             from /usr/x86_64-w64-mingw32/include/c++/4.9.1/cstdlib:72,
             from hello.cpp:1:
/usr/include/sys/types.h:109:19: error: conflicting declaration ‘typedef __ssize_t ssize_t’
 typedef __ssize_t ssize_t;
                   ^

MinGW的cstdlib包括/usr/include/stdlib.h 而不是/usr/x86_64-w64-mingw32/include/stdlib.h!我该如何解决这个问题?我需要-I才能包含Boost,但MinGW包含其他标题错误。

1 个答案:

答案 0 :(得分:3)

您不能使用/ usr / include中的boost标头来交叉编译Windows二进制文件。

你也应该交叉编译boost。

有关如何在Linux上交叉编译boost(有关vle,但第一部分是关于boost)的详细信息,请参阅本指南:

http://www.vle-project.org/wiki/Cross_compilation_Win32

更新:鉴于指南有点旧,有意义链接到提升文档:

http://www.boost.org/boost-build2/doc/html/bbv2/tasks/crosscompile.html