プログラムのロードとリンク

1655 ワード


 
 
hello.h
 #ifndef HELLO_H
 #define HELLO_H

 void hello(const char *name);

 #endif //HELLO_H

 
hello.c
#include 
 
void hello(const char *name) {
    printf("Hello %s!
", name); }

 
main.c
#include "hello.h"
 
int main() {
    hello("everyone");
    return 0;
}

 
 
生成oファイル
gcc -c hello.c
 
 
 
静的ライブラリファイルの生成
ar cr libmyhello.a hello.o
gcc -o hello main.c -L. -lmyhello
./hello
Hello everyone!

 
 
 
 
ダイナミックライブラリの生成
gcc -shared -fPIC -o libmyshare.so hello.c
gcc -o hello main.c -L. -lmyhello
./hello
  
./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory
 strace   hello              , libmyshare.so   /usr/lib64   
   ./hello    

 
 
 
 
 
 
関連するコマンド
名前
意味
ar
静的ライブラリの作成、メンバーの挿入、削除
ldd
実行可能ファイルの実行に必要な共有ライブラリをリストします.
gcc
強力なコンパイルツール
nm
ターゲットファイルのシンボルテーブルで定義されたシンボルをリストします.
size
ターゲットファイルのsectionの名前とサイズをリストします
objdump
すべてのバイナリツールの親が1つのターゲットファイルに表示できるすべての情報の最大の役割は逆アセンブリである.textフラグメントのバイナリ命令
readelf
ターゲットファイルの完全な構造を表示するには、sizeとnmの機能を含むELFヘッダで符号化されたすべての情報が含まれます.
strace
デバッグツールのトレース
strip
余分なセグメントを削除
objcopy
1つのターゲットファイルの内容を別のファイルにコピー
 
 
 
 
 
リファレンス
Linux静的ライブラリと動的ライブラリの分析について
プログラムのコンパイルリンクプロセス
プログラム実行プロセス:リンク、マウントおよび実行