MinGW включает конфликт путей

Я пытаюсь выполнить кросс-компиляцию в Linux для Win64, используя MinGW-w64. Вот мой код

#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;
                   ^

cstdlib MinGW включает /usr/include/stdlib.h вместо /usr/x86_64-w64-mingw32/include/stdlib.h! Как мне это решить? Мне нужно -I, чтобы включить Boost, но тогда MinGW неправильно включает другие заголовки.


person Max    schedule 29.07.2014    source источник
comment
boost также должен быть кросс-компилирован, заголовок в /usr/include предназначен только для Linux (наилучшее предположение)   -  person JuanR    schedule 30.07.2014
comment
Да, это не сработает, если вы скопировали включаемые файлы Boost из Linux.   -  person Ross Ridge    schedule 30.07.2014


Ответы (1)


Вы не можете использовать заголовки boost из /usr/include для кросс-компиляции двоичных файлов Windows.

Вы также должны кросс-компилировать boost.

См. это руководство для получения подробной информации о том, как выполнить кросс-компиляцию boost в Linux (это для vle, но первая часть посвящена boost):

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

Обновление: учитывая, что руководство немного устарело, имеет смысл дать ссылку на документацию по повышению:

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

person JuanR    schedule 29.07.2014
comment
Я полагаю, это касается всех нестандартных библиотек? Это будет много кросс-компиляции. - person Max; 30.07.2014