Как скомпилировать Rust программу в MacOS для Windows
Однажды мне понадобилось скомпилировать исходный код Rust в .exe-исполняемый файл. Программа разрабатывалась на MacOS и в конечном итоге достигла своего логического завершения. Однако некоторое время спустя появилось новое техническое требование - скомпилировать программу для Windows x86_64.
Решение
Шаг 1
Чтобы скомпилировать исходный код для платформы отличной от той, на которой вы разрабатываете программу необходимо задать опцию target.
Команда
Задать target можно при запуске компилятора, а можно используя файл конфигурации. [Подробно про конфигурацию]
В нашем случае предполагается, что файл конфигурации находится в
Теперь нам необходим этот самый
Это так называемый GNU Compiler Collection — набор компиляторов для различных языков программирования. Нам следует установить его в систему, а затем добавить в Rust toolchain.
Компилятор Rust последовательно просматривает каждый файл исходного кода и проверяет его на соответствие правилам языка Rust. Затем он преобразовывает исходный код в файл машинного языка, называемый объектным файлом.
После того, как компилятор создает один или несколько объектных файлов, другая программа, называемая компоновщиком, берет все объектные файлы, сгенерированные компилятором, и объединяет их в одну исполняемую программу. Помимо возможности связывать объектные файлы, компоновщик также может связывать файлы библиотек. Файл библиотеки представляет собой набор предварительно скомпилированного кода, который был «упакован» для повторного использования в других программах.
Шаг 2
Самое время установить соответствующий GCC, коллекцию компиляторов GNU для Windows. Как этот Mingw-W64.
Я буду устанавливать через Homebrew.
Шаг 3
Теперь можно добавить target в toolchain.
Все готово, можно пробовать запустить компиляцию:
Troubleshooting!
Если компиляция не удалась, как это было у меня из-за всевозможных попыток выработать решение, то можно попробовать следующее:
Ссылки:
Решение
Было бы проще, вероятно, собрать программу на Windows, однако такой путь несопоставим с эволюцией программирования; нам следует решать проблему, а не искать обходные пути.
Описание
Шаг 1
Чтобы скомпилировать исходный код для платформы отличной от той, на которой вы разрабатываете программу необходимо задать опцию target.
Команда
> rustup target list выводит список всех доступных значений для этой опции.Задать target можно при запуске компилятора, а можно используя файл конфигурации. [Подробно про конфигурацию]
В нашем случае предполагается, что файл конфигурации находится в
.cargo/config относительно корня проекта. Для компиляции под Windows x86_64 мы должны указать следующие инструкции:
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
linker = "x86_64-w64-mingw32-gcc"
Теперь нам необходим этот самый
86_64-pc-windows-gnuЭто так называемый GNU Compiler Collection — набор компиляторов для различных языков программирования. Нам следует установить его в систему, а затем добавить в Rust toolchain.
Toolchain - это набор связанных инструментов необходимых для компиляции и генерации выполняемого кода из исходных текстов.Так же мы должны указать компоновщик -
linkerКомпилятор Rust последовательно просматривает каждый файл исходного кода и проверяет его на соответствие правилам языка Rust. Затем он преобразовывает исходный код в файл машинного языка, называемый объектным файлом.
После того, как компилятор создает один или несколько объектных файлов, другая программа, называемая компоновщиком, берет все объектные файлы, сгенерированные компилятором, и объединяет их в одну исполняемую программу. Помимо возможности связывать объектные файлы, компоновщик также может связывать файлы библиотек. Файл библиотеки представляет собой набор предварительно скомпилированного кода, который был «упакован» для повторного использования в других программах.
Шаг 2
Самое время установить соответствующий GCC, коллекцию компиляторов GNU для Windows. Как этот Mingw-W64.
Я буду устанавливать через Homebrew.
> brew install mingw-w64 Шаг 3
Теперь можно добавить target в toolchain.
> rustup target add x86_64-pc-windows-gnu Все готово, можно пробовать запустить компиляцию:
> cargo build --target=x86_64-pc-windows-gnu --verbose Troubleshooting!
Если компиляция не удалась, как это было у меня из-за всевозможных попыток выработать решение, то можно попробовать следующее:
> cp -f /usr/local/Cellar/mingw-w64/7.0.0_1/toolchain-x86_64/x86_64-w64-mingw32/lib/{,dll}crt2.o `rustc --print sysroot`/lib/rustlib/x86_64-pc-windows-gnu/lib
Ссылки:
Комментарии
Отправить комментарий