2015-01-02 3 views
1

Я работаю на ОС в Русте, и я встречая следующее сообщение об ошибке при попытке ссылки:Как указать или удалить зависимость от _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

+0

Я думал, это звучит знакомо. Вы должны включить ссылку на [Rust issue, которую вы открыли] (https://github.com/rust-lang/rust/issues/20379), который затем был закрыт. – Shepmaster

+0

Я не видел последнее сообщение о моделях переселения haha ​​ – ragingSloth

ответ

2

На основе этих двух замечаний в вопросе Rust вы открыли:

Если вы не хотите ПИК или динамический-нет -pic, вы должны спросить статическую модель.

И

модель перемещения можно управлять с помощью -C relocation-model=... аргумента

И проверяя, чтобы увидеть 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 
+0

спасибо за помощь за последние несколько недель. что полностью это сделало. – ragingSloth

Смежные вопросы