Wie verwende ich GNU ld mit einer von Rustc kompilierten OBJ-Datei ohne Ladung?
Posted: 05 Jan 2025, 04:46
Ich versuche, jeden Schritt im Build-Prozess wie hier beschrieben zu replizieren, aber mit rustc und ohne Ladung, wie folgt:
Der vorherige Schritt generiert main.o wie erwartet. Ich weiß, dass ich Folgendes tun könnte, um es auch zu verknüpfen, aber wie bereits erwähnt, möchte ich nicht, dass rustc eine AND-Verknüpfung kompiliert (stattdessen möchte ich Ich möchte GNU ld explizit zum Verlinken aufrufen):
Jetzt möchte ich dies mit anderen notwendigen Objektdateien verknüpfen, um eine ausführbare ELF-Datei zu generieren, die ich ausführen kann. Ich habe es mit dem folgenden Befehl versucht, aber es schlägt fehl:
Meine System-/Umgebungsinformationen:
Code: Select all
$ /home/foo/rustc_source/installed/usr/local/bin/rustc -v -g -C opt-level=0 --emit obj main.rs
Code: Select all
$ /home/foo/rustc_source/installed/usr/local/bin/rustc -v -g -C opt-level=0 --emit obj,link main.rs
Code: Select all
$ ld -o main.elf -Map=main.map /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o /usr/lib/x86_64-linux-gnu/crt1.o main.o
ld: /usr/lib/x86_64-linux-gnu/crt1.o: in function `_start':
(.text+0x21): undefined reference to `__libc_start_main'
ld: main.o: in function `std::rt::lang_start':
/home/foo/rustc_source/rust/library/std/src/rt.rs:194: undefined reference to `std::rt::lang_start_internal'
ld: main.o: in function `core::ops::function::FnOnce::call_once':
/home/foo/rustc_source/rust/library/core/src/ops/function.rs:250: undefined reference to `_Unwind_Resume'
ld: main.o: in function `main::main':
/media/foo/main.rs:2: undefined reference to `std::io::stdio::_print'
ld: main.o:(.data.DW.ref.rust_eh_personality[DW.ref.rust_eh_personality]+0x0): undefined reference to `rust_eh_personality'
Code: Select all
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
$ uname -r
6.5.0-44-generic
$ /home/foo/rustc_source/installed/usr/local/bin/rustc --version
rustc 1.84.0-nightly (32b17d56e 2024-10-28)