Подтвердить что ты не робот

Создание кросс-платформенного приложения (с использованием Rust)

Я начал изучать язык программирования Rust, и я использую Linux. Я хотел бы создать кросс-платформенное приложение, используя этот язык.

Возможно, вопрос не связан с языком Rust, но тем не менее, как мне это сделать? Я заинтересован в создании кросс-платформенного приложения "Hello World", а также для более сложных. Мне просто нужно понять.

Итак, что мне делать?

UPDATE

Что я хочу сделать, так это возможность запускать программу на трех разных платформах без изменения источников. Должен ли я создавать новый двоичный файл для каждой платформы из источников? Точно так же, как я мог сделать в C

4b9b3361

Ответ 1

Лучший способ понять это - загрузить исходный код Servo и изучить его самостоятельно. Servo - это абсолютно кросс-платформенная кодовая база, поэтому ей придется решать все эти вопросы, отвечать ли они в файлах сборки/конфигурации или на источник Rust.

Ответ 2

Для запуска на нескольких платформах вам необходимо создать исполняемый файл для каждой из них, как прокомментировал @huon-dbauapp.

Это довольно просто с Rust. Вы используете "--target =" с rustc, чтобы сообщить ему, что вы хотите построить. Тот же флаг работает с Cargo.

Например, эта сборка для цели ARM:

cargo build --target=arm-unknown-linux-gnueabihf

См. Rust Flexible Target Specification для получения дополнительной информации о целях.

Однако Rust не поставляется с стандартным ящиком, скомпилированным для ARM (по состоянию на июнь 2015 года). Если это так для вашей цели, вам сначала нужно скомпилировать std Crates для цели самостоятельно, что включает в себя компиляцию компилятора Rust из исходного кода и указание цели для этой сборки!

Для информации большая часть этого скопирована с: https://github.com/japaric/ruststrap/blob/master/1-how-to-Cross-Compile.md

Следующие инструкции относятся к gcc, поэтому, если у вас его нет, вам нужно его установить. Вам также понадобятся соответствующие инструменты кросс-компиляции, поэтому для gcc:

sudo apt-get install gcc-arm-linux-gnueabihf

Компилировать Rust STD Crate For ARM

В следующем примере предполагается, что вы уже установили текущую версию Rust Nightly, поэтому мы просто получим исходные коды и скомпилируем для ARM. Если вы используете другую версию компилятора, вам нужно получить ее, чтобы убедиться, что ваши библиотеки ARM соответствуют версии компилятора, который вы используете для создания своих проектов.

mkdir ~/toolchains
cd ~/toolchains
git clone https://github.com/rust-lang/rust.git
cd rust
git update

Сборка rustc для ARM

cd ~/toolchains/rust
./configure --target=arm-unknown-linux-gnueabihf,x86_64-unknown-linux-gnu
make -j4
sudo make install

Обратите внимание, что "-j4" требуется как минимум 8 ГБ ОЗУ, поэтому, если вы столкнулись с проблемой, описанной выше, попробуйте "make".

Установите библиотеки ARM rustc В родной сборке rustc

sudo ln -s $HOME/src/rust/arm-unknown-linux-gnueabihf /usr/lib/rustlib/arm-unknown-linux-gnueabihf

Создайте hello.rs, содержащий:

pub fn main() {
    println!("Hello, world!");
}

Скомпилируйте hello.rs и сообщите rustc имя перекрестного -C компилятора (который должен быть в вашем PATH):

rustc -C linker=arm-linux-gnueabihf-gcc-4.9 --target=arm-unknown-linux-gnueabihf hello.rs

Убедитесь, что созданный двоичный файл действительно является двоичным $ file hello ARM: $ file hello hello: ELF 32-битный общий объект LSB, ARM, EABI5 версия 1 (SYSV), (..)

УСПЕХ !!!:

Проверьте: двоичный файл должен работать на устройстве ARM

$ scp hello [email protected]:~
$ ssh [email protected] ./hello

Hello, world!

Я использовал это для создания и связывания проекта Rust с отдельной библиотекой C. Инструкции, подобные приведенным выше, о том, как это сделать, динамически или статически, содержатся в отдельном посте, но я уже использовал свою квоту на ссылку!

Ответ 3

Похоже, что компилятор ржавчины может быть не готов к созданию автономных двоичных файлов для окон (см. раздел здесь), поэтому это возможно не может быть сделано.

Для систем posix в основном это просто Work Work, если вы не пытаетесь сделать материал GUI.

Ответ 4

Да, вам не нужно будет менять исходный код, если вы не используете конкретные библиотеки, которые не являются межплатформенными.

Но поскольку @dbaupp говорит, что на каждой платформе родные исполняемые файлы различны, * nix использует ELF, Windows PE и OSX Mach-O. Поэтому вам нужно будет скомпилировать его для каждой платформы.

Я не знаю состояния кросс-компиляции в ржавчине, но если они уже реализованы, то вы должны иметь возможность создавать все двоичные файлы на одной платформе, если нет, вам придется строить каждый бинарный файл это платформа.