История изменений
Исправление
anonymous-angler,
(текущая версия)
:
Какой же ты деревянный 0\
Пол треда до тебя не доходит, что libdl и libpthread - это зависимости std
и поэтому они тянутся. std
можно выкинуть и заменить на core
. Делается это так:
% cat main.rs
#![feature(lang_items, core_intrinsics, rustc_private)]
#![feature(start)]
#![no_std]
#![no_main]
use core::intrinsics;
use core::panic::PanicInfo;
extern crate libc;
#[no_mangle]
pub extern "C" fn main(_argc: i32, _argv: *const *const u8) -> i32 {
42
}
#[lang = "eh_personality"]
#[no_mangle]
pub extern "C" fn rust_eh_personality() {}
#[lang = "panic_impl"]
#[no_mangle]
pub extern "C" fn rust_begin_panic(_info: &PanicInfo) -> ! {
intrinsics::abort()
}
% rustc -C opt-level=3 main.rs
% ldd main
linux-vdso.so.1 (0x00007ffd3076c000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f5806880000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f5806a88000)
% ./main || echo $?
42
% du -hs main
5.0K main
libc
нужна потому что это способ коммуникации с ядром, когда ты пишешь под ОС. Если пишешь под bare metal, то код будет немного другим, проще. И не нужна будет libc. Можешь сам погуглить.
Что за бред? У меня драва прям каждый день ломаются. Ну-ну.
Чукча не читатель. Но я не удивлён. Поясню. user-space API ломать запрещено. Kernel-space API ломать разрешено. Если ты ломаешь Kernel-space API, то тебе после этого нужно пофиксить внутри ядра всё, что от твоих действий сломалось, и только это. А всё что за пределами ядра (Например: ZFS, Nvidia, VirtualBox, etc.) перестанут собираться, пока их не пофиксят их собственные разработчики. Если для тебя слова Грега Кроа-Хартмана не авторитет в вопросах разработки ядра, то тут уже диалог продолжать бессмысленно.
Т.е. твои драйвера не ломаются либо потому что они от ядра соответствующей версии, либо потому что их уже пофиксили разработчки и они были пересобраны тобой самим или DKMS.
Исправление
anonymous-angler,
:
Какой же ты деревянный 0\
Пол треда до тебя не доходит, что libdl и libpthread - это зависимости std
и поэтому они тянутся. std
можно выкинуть и заменить на core
. Делается это так:
% cat main.rs
#![feature(lang_items, core_intrinsics, rustc_private)]
#![feature(start)]
#![no_std]
#![no_main]
use core::intrinsics;
use core::panic::PanicInfo;
extern crate libc;
#[no_mangle]
pub extern "C" fn main(_argc: i32, _argv: *const *const u8) -> i32 {
42
}
#[lang = "eh_personality"]
#[no_mangle]
pub extern "C" fn rust_eh_personality() {}
#[lang = "panic_impl"]
#[no_mangle]
pub extern "C" fn rust_begin_panic(_info: &PanicInfo) -> ! {
intrinsics::abort()
}
% rustc -C opt-level=3 main.rs
% ldd main
linux-vdso.so.1 (0x00007ffd3076c000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f5806880000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f5806a88000)
% ./main || echo $?
42
% du -hs main
5.0K main
libc
нужна потому что это способ коммуникации с ядром, когда ты пишешь под ОС. Если пишешь под bare metal, то код будет немного другим, проще. И не нужна будет libc. Можешь сам погуглить.
Что за бред? У меня драва прям каждый день ломаются. Ну-ну.
Чукча не читатель. Но я не удивлён. Поясню. user-space API ломать запрещено. Kernel-space API ломать разрешено. Если ты ломаешь Kernel-space API, то тебе после этого нужно пофиксить внутри ядра всё, что от твоих действий сломалось, и только это. А всё что за пределами ядра (Например: ZFS, Nvidia, VirtualBox, etc.) перестанут собираться, пока их не пофиксят их собственные разработчики. Если для тебя слова Грега Кроа-Хартмана не авторитет в вопросах разработки ядра, то тут уже диалог продолжать бессмысленно.
Т.е. твои драйвера не ломаются либо потому что они от ядра соответствующей версии, либо потому что их пересобрал ты сам или DKMS.
Исходная версия
anonymous-angler,
:
Какой же ты деревянный 0\
Пол треда до тебя не доходит, что libdl и libpthread - это зависимости std
и поэтому они тянутся. std
можно выкинуть и заменить на core
. Делается это так:
% cat main.rs
#![feature(lang_items, core_intrinsics, rustc_private)]
#![feature(start)]
#![no_std]
#![no_main]
use core::intrinsics;
use core::panic::PanicInfo;
extern crate libc;
#[no_mangle]
pub extern "C" fn main(_argc: i32, _argv: *const *const u8) -> i32 {
42
}
#[lang = "eh_personality"]
#[no_mangle]
pub extern "C" fn rust_eh_personality() {}
#[lang = "panic_impl"]
#[no_mangle]
pub extern "C" fn rust_begin_panic(_info: &PanicInfo) -> ! {
intrinsics::abort()
}
% rustc -C opt-level=3 main.rs
% ldd main
linux-vdso.so.1 (0x00007ffd3076c000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f5806880000)
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f5806a88000)
% ./main || echo $?
42
% du -hs main
5.0K main
libc
нужна потому что это способ коммуникации с ядром, когда ты пишешь под ОС. Если пишешь под bare metal, то код будет немного другим, проще. И не нужна будет libc. Можешь сам погуглить.
Что за бред? У меня драва прям каждый день ломаются. Ну-ну.
Чукча не читатель. Но я не удивлён. Поясню. user-space API ломать запрещено. Kernel-space API ломать разрешено. Если ты ломаешь Kernel-space API, то тебе после этого нужно пофиксить внутри ядра всё, что от твоих действий сломалось, и только это. А всё что за пределами ядра (Например: ZFS, Nvidia, VirtualBox, etc.) перестанут собираться, пока их не пофиксят их собственные разработчики. Если для тебя слова Грега Кроа-Хартмана не авторитет в вопросах разработки ядра, то тут уже диалог продолжать бессмысленно.