問題タブ [musl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - `rustc --target=$TARGET` リンク先の libc.so を見つける方法は?
でクエリできるように、Rust ビルドで使用されている libc.so ファイルを見つけたいと考えています--version
。(一部の libcs は C マクロを介してバージョン情報を公開するためcc
、ビルド スクリプトでクレートを使用することもできます。しかし、musl のようなものはそうではありません。)
Rust バイナリまたはライブラリがリンクされるファイルを特定できます。libstd-*.so
これがホストの libclibstd.so
に対してリンクされている場合、その上で実行すると、 . しかし、ホスト システムが glibc を使用していて、ターゲット環境が musl の場合、これは機能しません (「無効な ELF ヘッダー」)。の代わりに、またはを使用できます。ただし、これらはフルパスではなく、使用するファイルのファイル名のみを表示します。そして、それは のどのディレクトリにもありません。(自分のシステムのどこにあるかは知っていますが、任意のシステムでプログラムで見つけようとしています。)ldd
libc.so
ldd
readelf -d
objdump -p
libstd.so
libc.so
libc.so
LD_LIBRARY_PATH
実行ldconfig -p
すると、ホスト システムの libc に関する情報のみが得られます。
-print-file-name=libc.so
のようなことができるように、gcc と clang に相当するrustc があれば素晴らしいでしょうrustc --target=$TARGET --print-file-name=libc.so
。
この情報を取得する方法についての他のアイデアはありますか?
arm - musl-cross-make を使用した標準ライブラリ内のシンボルへの未定義の参照
私は、musl-cross-make (gcc 9.2.0、musl 1.2.0) でビルドされた arm 用の musl ターゲット クロス コンパイラを使用しています。printf を使用して単純な hello world c プログラムをコンパイルすると、標準ライブラリにあるシンボルの未定義の参照が取得されます。
libc.a と crt1.o をリンカー コマンドに追加すると、エラーは発生しません。
-nostartfiles、-nostdlib、-nodefaultlibs を使用しない場合は、標準ライブラリと起動ファイルを指定する必要はないと思ったのですが、間違っていますか?