Я работаю на ОС в Русте, и я встречая следующее сообщение об ошибке при попытке ссылки:Как указать или удалить зависимость от _GLOBAL_OFFSET_TABLE_?
неопределенному ссылкой на «_GLOBAL_OFFSET_TABLE_»
Это вызвано, как лучше как я могу сказать, любую функцию Rust, которая вызывает другую. У меня также есть #[no_std]
. Мой сценарий компоновщика не включает такую ссылку на _GLOBAL_OFFSET_TABLE_
, не так ли?
OUTPUT_FORMAT("binary")
ENTRY(start)
phys = 0x0010000;
SECTIONS
{
.text phys : AT(phys) {
code = .;
*(.text)
*(.rodata)
. = ALIGN(4096);
}
.data : AT(phys + (data - code)) {
data = .;
*(.data)
. = ALIGN(4096);
}
.bss : AT(phys + (bss - code)) {
bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .;
}
Я строю с
>nasm -f aout -o start.o start.asm
>rustc -O --target i686-unknown-linux-gnu --crate-type lib -o main.o --emit obj main.rs
>ld -melf_i386 -Tlink.ld -o kernel.bin start.o main.o
main.0.rs:(.text.main+0xb): undefined reference to '_GLOBAL_OFFSET_TABLE_'
>nm main.o
U _GLOBAL_OFFSET_TABLE_
00000000 T main
00000000 T memcmp
...
Как включить этот символ? Есть ли способ удалить мою зависимость от него? Полный код с Makefiles здесь, если кто-то хочет попробовать строить его: https://github.com/ragingSloth/rustboot
Я думал, это звучит знакомо. Вы должны включить ссылку на [Rust issue, которую вы открыли] (https://github.com/rust-lang/rust/issues/20379), который затем был закрыт. – Shepmaster
Я не видел последнее сообщение о моделях переселения haha – ragingSloth