我正在尝试使用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包含其他标题错误。
答案 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