【问题标题】:MinGW include paths conflictMinGW 包含路径冲突
【发布时间】:2014-07-29 21:42:43
【问题描述】:

我正在尝试使用 MinGW-w64 在 Linux 上为 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 错误地包含其他标头。

【问题讨论】:

  • boost 也必须交叉编译,/usr/include 中的头文件仅适用于 linux(最好的猜测)
  • 是的,如果您从 Linux 复制 Boost 包含文件,它将无法工作。

标签: c++ mingw mingw-w64


【解决方案1】:

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

您还应该交叉编译 boost。

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

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

更新:鉴于指南有点旧,链接到 boost 文档是有意义的:

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

【讨论】:

  • 我想这适用于所有非标准库吗?这将是很多交叉编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多