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

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

Post by Guest »

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)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post