私は大学で授業を受けるためのNASM
でアセンブリを学んでいます。 Cランタイムライブラリをld
とリンクしたいと思っていますが、私はその周りに私の頭を包んでいるようには見えません。私はLinux Mint
がインストールされた64 bit
マシンを持っています。Cランタイムライブラリを 'ld'とリンクさせる方法は?
私は混乱している理由はある - 私の知識に - 代わりに、Cランタイム、gcc
コピーし、あなたのプログラムに必要なものをリンクします。私は間違っているかもしれないので、これで私を修正するのをためらってください。
私がこれまで行ったことは、gcc
を使ってリンクすることです。これは、とrbx
を交換するような小さなプログラムであっても、学習にはあまり役に立ちません。 (プログラムが動作することに注意してください。)
を、私はそれが関連するかどうか分からないが、これらは私がコンパイルに使用しているコマンドとリンクしている:
# compilation
nasm -f elf64 swap.asm
# gcc
gcc -o swap swap.o
# ld, no c runtime
ld -s -o swap swap.o
は、事前にありがとうございます!
結論:
今、私は質問に対する適切な答えを持っていることを、ここで私が言及したいと思いますいくつかあります。 glibc
を動的にリンクすることは、Zボソンの回答(64ビットシステムの場合)のように行うことができます。あなたがそれを静的にしたいのであれば、do follow this link(私がZボソンの答えから転載していること)。
ここに記事Jesterが掲載されています。約how programs start in linuxです。
gcc
があなたの.o
-sをリンクするかどうかを確認するには、このコマンドを試してみてください:gcc -v -o swap swap.o
。 'v'は 'verbose'の略です。
また、64ビットアセンブリに興味がある場合はyou should read thisです。
はあなたの答えで役立つ洞察力のためのあなたをありがとう!演説の終わり。
短い回答:しないでください。残念ながら、libcには動的ライブラリだけでなく、初期化とシャットダウンに必要な静的オブジェクトがたくさんあります。本当にやりたければ、 'gcc -v'を使って必要な部分が何であるかを見てください。この[プログラムの起動に関するすばらしい記事](http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html)に興味があるかもしれません。 – Jester
'gcc -o swap swap.o'はランタイムをリンクします。 'ld -o swap swap.o'はしません。リンクするには、ランタイムの大規模な部分を実行可能ファイルにコピーすることが含まれます。問題は何ですか? –
@Jesterそれを今見てみましょう! – mrDudePerson