Wie verwende ich GNU ld mit einer von Rustc kompilierten OBJ-Datei ohne Ladung?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Wie verwende ich GNU ld mit einer von Rustc kompilierten OBJ-Datei ohne Ladung?

by Guest » 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:

Code: Select all

$ /home/foo/rustc_source/installed/usr/local/bin/rustc -v -g -C opt-level=0 --emit obj main.rs
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):

Code: Select all

$ /home/foo/rustc_source/installed/usr/local/bin/rustc -v -g -C opt-level=0 --emit obj,link main.rs
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:

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'
Meine System-/Umgebungsinformationen:

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)

Top