gpt4 book ai didi

ubuntu - 使用 prefer-dynamic 时无法执行 hello world 项目

转载 作者:行者123 更新时间:2023-11-29 07:58:07 26 4
gpt4 key购买 nike

我正在一个极其简单的项目 hello world 上使用 Rust 的编译选项:

fn main() {
println!("Hello, world!");
}

我正在用这一行进行编译,prefer-dynamic 是唯一值得注意的选项:

rustc main.rs -o ./build/rci -C prefer-dynamic

它工作正常,直到我做了一些更改然后它没有。现在,如果我尝试完全按照上面的方式编译代码,我会得到以下输出:

./build/rci: error while loading shared libraries: libstd-2ddb28df747fcb8c.so: cannot open shared object file: No such file or directory

ldd 的输出是:

linux-vdso.so.1 =>  (0x00007ffd321a4000)
libstd-2ddb28df747fcb8c.so => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f52eaef3000)
/lib64/ld-linux-x86-64.so.2 (0x000055f0f6251000)

这是在带有 Rust 1.15.1 的 Ubuntu 17.04 上。

最佳答案

您应该检查您的术语;编程时,单词表示特定的事物。您能够很好地编译您的代码,正如调用 Rust 编译器(又名 rustc)没有任何错误这一事实所示。

您的问题发生在执行 程序时。这些是截然不同的概念,有助于您理解其中的区别。

“问题”是您...正在使用动态链接,就像您要求的那样。这不是 Rust 问题,只是一般编程问题。我确定有很多 SO 问题,例如 Linux error while loading shared libraries: cannot open shared object file: No such file or directory500 other questions with that error message 之一可以为您提供更多信息。

您动态链接到 Rust 标准库,但您的系统不知道该库,因为它没有安装在您系统知道的位置。很可能,您是通过 rustup 安装的,所以该库位于您的主目录中。例如,我的在 /home/ubuntu/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/libstd-f4594d3e53dcb114.so

您会发现许多可能的解决方案。最简单的演示是使用 LD_LIBRARY_PATH 变量:

$ ./example
./example: error while loading shared libraries: libstd-f4594d3e53dcb114.so: cannot open shared object file: No such file or directory
$ LD_LIBRARY_PATH=/home/ubuntu/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/ ./example
Hello, world!

您还可以查看 Linking Rust application with a dynamic library not in the runtime linker search path


为了帮助发现这一点,您可以制作 Rust print out the linker invocation it uses :

$ rustc +nightly -Cprefer-dynamic -Z print-link-args hello.rs
"cc" "-m64" "-L" "/Users/shep/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "hello.hello0.rcgu.o" "hello.hello1.rcgu.o" "hello.hello2.rcgu.o" "hello.hello3.rcgu.o" "hello.hello4.rcgu.o" "hello.hello5.rcgu.o" "-o" "hello" "hello.crate.allocator.rcgu.o" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/Users/shep/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "-L" "/Users/shep/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "-l" "std-834fbefe8dbe98b5" "/Users/shep/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-b4312e2f1496a4e4.rlib" "-l" "System" "-l" "resolv" "-l" "pthread" "-l" "c" "-l" "m"

你可以看到 "-L""/Users/shep/.rustup/toolchains/nightly-x86_64-apple-darwin/lib/ruSTLib/x86_64-apple-darwin/lib" 是添加到链接器路径,然后 "-l""std-834fbefe8dbe98b5" 链接标准库。

关于ubuntu - 使用 prefer-dynamic 时无法执行 hello world 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44012802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com