重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C言語についてですが、
例えば複数のexeがSOにアクセスするとして、
SOに修正が入った場合、exeもコンパイルし直した
方が良いのですか?
共通ライブラリ(SO)に修正が入ると、フルコンした方が
よいとかよく聞きますが、未だにexeとSOのメモリの使い方が
よく分かっていません。
ご教授頂けると喜ばしいです。

A 回答 (4件)

>alignmentや呼び出し規約ってなんですか?



alignment
構造体のメンバ配置の制限具合かな。詳細は
コンパイラのマニュアルを見て下さい。
呼び出し規約
関数呼び出しでのスタックやレジスタの使い方。__fastcall
とかいろいろ有りますが、64bitでは絶滅危惧種です。

>共通ライブラリ(SO)に修正が入ると、
>フルコンした方がよい
通常はincludeに修正が入らなければ不要。
    • good
    • 0

関数の signatureが変わってなければ再コンパイル


不要。

但し、signatureにはalignmentや呼び出し規約なども含まれることに
注意。
    • good
    • 0
この回答へのお礼

もう少し、詳しくご教授頂けませんか?
alignmentや呼び出し規約ってなんですか?
alignmentは構造体のパディングに関連する話ですか?

お礼日時:2016/07/21 21:25

通常は、中身が変わっても、動作自体が変わらなければ、exe側を変更する必要はありません。



int funcAint a) {return a+a ;}
という関数が共有ライブラリにあったとして、
int funcA(int a) {return a *2 ;}
に変えたとしても、 引数や戻り値の型、仕様に変更が無ければ、exe側には影響ありません。

これが
int funcA(int a,int b) {return a *b ;}
等と、仕様が別物になってしまうと、exeの方も変更,コンパイルが必要になります。

実際の運用では、仕様が変わったらsoファイルの名前も変える(バージョン番号付きにしておく)ことで、exeを変更することなく共存できるようにします。
    • good
    • 0
この回答へのお礼

なるほど、回答ありがとうございます。

お礼日時:2016/07/21 21:24

soファイル(WindowsではDLLファイル)のリンクは、それを使用している実行ファイルの実行時に行われます。


 したがってsoファイルを置き換え時に実行ファイルをコンパイル&リンクまたはリンクし直す必要はありません。
 共通ライブラリという仕組みはそのためにあります。

参考まで。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2016/07/21 21:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!