gpt4 book ai didi

linker - 如何提供或删除对 _GLOBAL_OFFSET_TABLE_ 的依赖?

转载 作者:行者123 更新时间:2023-11-29 08:17:11 27 4
gpt4 key购买 nike

我正在使用 Rust 开发操作系统,尝试链接时遇到以下错误:

undefined reference to '_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 问题中的这两条评论:

If you don't want the pic or dynamic-no-pic relocation models then you should ask for the static model.

the relocation model can be controlled via the -C relocation-model=... argument

并查看 what the global offset table is无论如何,我想你想更新你的编译器命令是:

rustc -O --target i686-unknown-linux-gnu --crate-type lib -o  main.o --emit obj -C relocation-model=static main.rs

关于linker - 如何提供或删除对 _GLOBAL_OFFSET_TABLE_ 的依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27748964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com