Запросы по кросс-компиляции, от Windows до Linux и от Linux до Windows,

Я работаю над C, проект, который использует ffmpeg библиотека.
В настоящее время я работаю над окна платформу, и я буду кросс-компиляции проекта для Linux ARM.
На этом фоне у меня мало основных вопросов.

  1. Если я использую ANSI C ++, Я могу быть уверен, что я смогу кросс-компилировать проект, используя соответствующие компиляторы [ MSVC, MingW ]

    Но ..

  2. Если я использую в своем проекте «Win32» и другие специфичные для Windows API, как кросс-компилятор справится с этим, чтобы проект мог работать в Linux.

  3. Точно так же, если я использую специфичные для Linux «особенности» в своем проекте, как кросс-компилятор справится с этим, чтобы проект мог работать в Windows.

2

Решение

При кросс-компиляции код, который кросс-компилируется, должен использовать API-интерфейсы, доступные на целевой платформе (т. Е. Тот, на котором он в конечном итоге будет работать). Кросс-компилятор волшебным образом не предоставляет доступ к Win32 API, когда его вывод выполняется на машине с Linux; это то же самое, что компилировать код на целевая машина, но означает, что вам не нужно делать это на самом деле. Другими словами, вы могли бы добиться того же, просто запустив собственный (не перекрестный) компилятор на компьютере ARM Linux, но для запуска компилятора вам понадобится достаточно мощный компьютер ARM.

Тем не менее, в принципе, вы можете кросс-компилировать в Linux при использовании Winelib предоставить Win32 API. Не уверен, насколько хорошо он работает на ARM — он действительно предназначен только для x86.

Наконец, обратите внимание, что кросс-компиляция имеет тенденцию быть довольно сложной даже в лучшие времена. Это может сделать вашу жизнь проще для кросс-компиляции из x86 Linux в ARM Linux вместо x86 Windows в ARM Linux — хотя можно выполнять кросс-платформенную и кросс-платформенную сборки, чем меньше переменных вы измените, тем проще будут вещи.

2

Другие решения

Если вы используете Winapi, ваш проект не сможет работать в Linux.

1

По вопросам рекламы [email protected]