2017-05-16 14 views
0
私は非常に単純なプロジェクトに錆のコンパイルオプションで遊んだ

、Hello Worldの使用時にハローワールドプロジェクトを実行することができません:、私はこのラインでコンパイルしていは好む-ダイナミック

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

を好む、ダイナミック

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) 

これは錆1.15.1でのUbuntu 17.04です。

答えて

4

用語を確認してください。言葉はプログラミング時に特定のことを意味します。あなたはコンパイルあなたのコードはRustコンパイラ(a.k.a. rustc)を呼び出すとエラーがないという事実に示すように、うまくコンパイルできます。

プログラムを実行すると問題が発生します。これらは非常に異なる概念であり、違いを理解するのに役立ちます。

「問題」は、あなたが求めているのと同じように、ダイナミックリンクを使用していることです。これはではなく、 a錆問題です。一般的なプログラミングの問題です。 Linux error while loading shared libraries: cannot open shared object file: No such file or directoryや、より多くの情報を提供できる500 other questions with that error messageのうちの1つなど、多くのSOの質問があると確信しています。

Rust標準ライブラリと動的にリンクしていますが、システムが認識している場所にインストールされていないため、システムはそのライブラリについて認識しません。おそらく、あなたは錆びてインストールされているので、ライブラリはホームディレクトリにあります。たとえば、私の住所は/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

+0

ああをチェックアウトすることができ、それはおそらく、それは、前のさび/貨物の残されたアーティファクトをインストールします。 – flukus

+0

@flukusどういう意味ですか?これらのライブラリをホームディレクトリにインストールするのは意図的な場所であり、ホームディレクトリはシステム実行可能ローダの検索パスの一部ではありません。 「残された」とは何ですか? – Shepmaster

+0

私はフォルダ自体を意味し、パスの変更は前回のインストールからのものです。私はubuntuパッケージをコンパイルして実行しようとしています。 – flukus

関連する問題