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)
Ich versuche, jeden Schritt im Build-Prozess wie hier beschrieben zu replizieren, aber mit rustc [b]und ohne Ladung[/b], wie folgt:
[code]$ /home/foo/rustc_source/installed/usr/local/bin/rustc -v -g -C opt-level=0 --emit obj main.rs
[/code]
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 [b]AND[/b]-Verknüpfung kompiliert (stattdessen möchte ich Ich möchte GNU ld explizit zum Verlinken aufrufen):
[code]$ /home/foo/rustc_source/installed/usr/local/bin/rustc -v -g -C opt-level=0 --emit obj,link main.rs
[/code]
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]$ 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]
Meine System-/Umgebungsinformationen:
[code]$ 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)
[/code]