ここから本文です

c言語 オブジェクトファイルの意味をわかりやすく説明して欲しいです…

アバター

ID非公開さん

2018/10/1300:22:21

c言語 オブジェクトファイルの意味をわかりやすく説明して欲しいです…

オブジェクトファイル,printf,gcc hello.c,scanf,stdio.h&gt,機械語コード列,Hello World

閲覧数:
55
回答数:
3

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

2018/10/1315:05:04

~オブジェクトファイルの意味~

ソースコードをコンパイルした結果として、とりあえずの形の機械語コード列が得られます。でも、まだ動かすことは出来ません。

ソースコード中で scanf や printf が呼び出されているとして、scanf、printf を呼び出す命令はコンパイル結果に含まれます。でも、scanf、printf そのものの機械語コードは含まれません。だって、ソースコード中に書かれてないわけだから。これは当たり前。

そのようなまだ動かすことが出来ない状態の中途半端な形の機械語コード列、そして、若干の追加情報、といったものを足し合わせてファイル化したものを「オブジェクトファイル」と言います。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

kat********さん

2018/10/1310:52:36

ソースコード単体をコンパイルしていて、
#includeの部分は、リンクの際にライブラリの情報を
挟み込むよう指示する内容に代わっているような状態。

プロフィール画像

カテゴリマスター

nor********さん

2018/10/1300:57:33

たとえば

#include <stdio.h>

int main(void){
``printf("Hello,world!\n");
}

を「hello.c」として

gcc hello.c -o hello

とすると

ソースファイル→オブジェクトファイル→実行形式ファイル

という段階を経ます。
1段階目を「コンパイル」、2段階目を「リンク」と呼びます。
オブジェクトファイルは基本的にはマシン語に変換されますが、それだけでは「printf」のような関数をどう呼び出せばいいのかは未解決のままです。関数の呼び出しはそのたびに関数の名前を探しているわけではありません。
グローバル変数などもそうです。
オブジェクトファイルにはそうした情報も残されていて、リンクの段階で解決して実行可能なファイルとして生成されます。

動的リンク(WindowsのDLL、Linux/Unixなどの共有ライブラリの呼び出しの解決は実行時に持ち越しになりますが。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる