C言語関係掲示板

過去ログ

No.981 libの内容変更で再リンクは必要か

[戻る] [ホームページ]
No.12794

ライブラリ(lib)について教えてください。
投稿者---点一(2004/02/17 01:26:37)


C言語初心者の者なのですが
教えていただきたいことがあります。
(Unix 環境です)

libを自作して、複数のプログラムで使用した場合、
libの内容を変更(関数の追加等)をおこなうと、
やはり再度リンクしなおさないといけないのでしょうか。

初歩的な質問で申し訳ないのですがよろしくお願いします。

No.12797

Re:ライブラリ(lib)について教えてください。
投稿者---NykR(2004/02/17 10:47:02)


>C言語初心者の者なのですが
>教えていただきたいことがあります。
>(Unix 環境です)
>
>libを自作して、複数のプログラムで使用した場合、
>libの内容を変更(関数の追加等)をおこなうと、
>やはり再度リンクしなおさないといけないのでしょうか。
>
>初歩的な質問で申し訳ないのですがよろしくお願いします。

変更した内容をプログラムに反映させたいのなら、リンクし直す必要があります。
その必要がないのなら、リンクし直す必要はありません。
反映させるのがいやなら、リンクし直す必要はありませんが、最初にスタティックリンクにしておかなければなりません。

#リンク時にオブジェクトファイルをずらずら並べる、要するに普通のやり方をすれば
#コンパイル時にリンクされる、スタティックリンクになります
#オブジェクトファイルの内容が実行ファイルに組み込まれてしまうので
#後でいくらオブジェクトファイルだけを変更しても実行ファイルの中のコードには関係ありません

UNIX環境だったら -shared オプションがあれば、それを使って実行時にリンクされるファイルを作ることができます。

cc -shared -o liblibrary.a librarysource.c

この場合は、修正したファイルだけを↑のようにコンパイルし直すだけでよく、手作業でリンクし直す必要はありません。が、最初に -llibrary オプションでリンクを設定しておく必要があります(数学関数を使うのに-lmをつけるのが、まさにこれです)
また、-LPATH オプションで、PATHも設定する必要があるかもしれません

cc source.c -L./ -llibrary

#あまり初歩的じゃない。自分が言っているのが正しいのかどうかもわからない
#ただ、自分でやったらこれで出来た。

No.12891

Re:ライブラリ(lib)について教えてください。
投稿者---点一(2004/02/22 18:18:08)


>変更した内容をプログラムに反映させたいのなら、リンクし直す必要があります。
>その必要がないのなら、リンクし直す必要はありません。
>反映させるのがいやなら、リンクし直す必要はありませんが、最初にスタティックリンクにしておかなければなりません。
>
>#リンク時にオブジェクトファイルをずらずら並べる、要するに普通のやり方をすれば
>#コンパイル時にリンクされる、スタティックリンクになります
>#オブジェクトファイルの内容が実行ファイルに組み込まれてしまうので
>#後でいくらオブジェクトファイルだけを変更しても実行ファイルの中のコードには関係ありません
>
>UNIX環境だったら -shared オプションがあれば、それを使って実行時にリンクされるファイルを作ることができます。
>
>cc -shared -o liblibrary.a librarysource.c
>
>この場合は、修正したファイルだけを↑のようにコンパイルし直すだけでよく、手作業でリンクし直す必要はありません。が、最初に -llibrary オプションでリンクを設定しておく必要があります(数学関数を使うのに-lmをつけるのが、まさにこれです)
>また、-LPATH オプションで、PATHも設定する必要があるかもしれません
>
>cc source.c -L./ -llibrary
>
>#あまり初歩的じゃない。自分が言っているのが正しいのかどうかもわからない
>#ただ、自分でやったらこれで出来た。

点一です。
上記の説明を参考にがんばってみようと思います。
回答ありがとうございました。