2018-2019-1 20175206「情報セキュリティシステム設計の基本」3週目の学習の概要

2018-2019-1 20175206「情報セキュリティシステム設計の基本」3週目の学習の概要

gccの学習

gccの処理文書フロー

のは、文書のGCC処理の手順を見てみましょう:

$ cd demo  #进入源文件所在目录
$ touch main.c  #新建空白的源文件
$ gedit main.c  #编辑源文件
$ gcc main.c  #生成可执行程序
$ ./a.out  #运行可执行程序

GCCコンパイラのプロセス

しかし逆に、私が学んだことを知った後に
非表示になりますgccで扱うとき、私たちはその場所の結果だけを見ることができるので、これらの中間ファイルは、目に見えないです.oファイル、.iファイル、.Sファイルを。

GCCコンパイラとリンカ

ターゲット・ファイルの複数のソースコードファイルを複数生成、コンパイル、各ターゲット・ファイルはマシンコードとデータ・ソースファイルのシンボルテーブルを含みます。-cオプションは、GCCコンパイラだけでなく、リンクを指示しない限り、そうでない場合GCCは、出力先のファイルとして一時ファイルを使用します:
$ gccの-c main.cの
$のgcc -c func.c
これらのコマンドは、カレントディレクトリに2つのオブジェクト・ファイルを生成します、彼らは、main.oとfunc.o.です 同じGCCコマンドに2つのソースファイル名は、あなたも同じ結果を得ることができます:
$ gccの-c func.cのmain.c
したら、現在のソースファイルのすべてがオブジェクトファイルにコンパイルされている、あなたはそれらをリンクするGCCを使用することができます:
$ gccの-o app.out main.o func.o -lm
GCC仮定拡張子.oファイルをリンクするオブジェクトファイルです。

扩展名
.c  
C程序源代码,在编译之前要先进行预处理。
.i  
C程序预处理输出,可以被编译。
.h  
C程序头文件。(为了节省时间,许多源文件会包含相同的头文件,GCC 允许事先编译好头文件,称为“预编译头文件”,它合适情况下自动被用于编译。)
.s  
汇编语言。
.S  
有C命令的汇编语言,在汇编之前必须先进行预处理。

静的および動的リンクのリンク

スタティックリンクライブラリは、関係なく、あなたが喜んでいるかどうかの、LIBすべての命令を直接生成されたEXEの最終文書に含まれている場合、静的および動的リンクライブラリのリンクライブラリは、コードを共有しています。ただし、DLLを使用する場合、DLLは、最終的なEXEファイルに含まれていなくても、あなたは「ダイナミック」参照することができますし、スタンドアロンEXEやDLLファイルEXEファイルの実行をアンインストールします。静的および動的リンクライブラリ静的にリンクされたDLLライブラリのもう1つの違いは、もはや、他の静的ライブラリまたはダイナミックリンクライブラリが含まれていないダイナミックリンクライブラリや、さらに他の更なる静的または動的リンクライブラリを含んでいてもよいということです。静的ライブラリと静的にリンクされたライブラリは、次のように比較して、全体的なルールを呼び出します。
静的リンクライブラリ(比較的簡単)について:
まず、静的にリンクされたライブラリは、開発者がライブラリファイルは.Hヘッダーと.libファイルを構築提供のライブラリを使用する必要があります。
第二に、ためには、呼び出し元のプログラムに命令のすべてが含まれますスタティックリンクライブラリは、EXEファイルを生成しました。静的リンクライブラリのであれば、その後もする完全な使用を持つためには、「ユーザーが利用できる機能をエクスポートする」いかなる状況はないだろう!またはあなたがする必要はありません!:)
ダイナミックリンクライブラリの場合:
ダイナミックリンクライブラリファイルを提供するために、ライブラリの開発者を使用する必要が.libファイルと.dllファイルを生成しました。それともだけのDLLファイルを提供しています。
まず、我々はDLL内の関数の2種類があることに注意しなければならない:
(1)DLL関数はアプリケーション呼び出しのために利用可能なエクスポート;
(2)内部DLL関数のみDLLで使用することができ、アプリケーションがそれらを呼び出すことはできません。
あなたは、呼び出し元がDLL内の関数を呼び出すようにしたいのであれば、それは最終的に関数呼び出しを希望示さ何らかの形的に必要です。

1>動的起動

.hファイル形式文のライブラリーの生成:
にextern「C」関数の戻り値の型__declspec(のdllexport)関数名(パラメータリスト);
ソースコードファイルの.cppプログラムで、次のプロシージャ・コール呼び出し:
主な機能をコードの先頭に
関数ポインタと機能モジュール定義モジュールに必要なDLLモジュールを呼び出す必要があり、このDLLを処理します。
すぐに良いの定義の後にリングの標準は次のとおりです。
------>モジュールハンドルを返す必要なDLLモジュールを取得する
のLoadLibrary(「DLLモジュールパスを」)
--->リターン関数ポインタのGetProcAddress(モジュールに必要な関数のアドレスを取得します「機能」)を扱う
DLLは、メモリモジュール--->にFreeLibrary(モジュールハンドル)から搬出されます

2>静的呼び出し

次のプロセスでの.cppソースコードファイルの呼び出し側と呼ばれる:
パスは、対応するDLLファイルが配置されているコンパイラとの.libファイル名を告げる
···
にextern「C」関数の戻り値の型_declspec(DLLIMPORT)関数名(パラメータテーブル)セミコロン
INTメイン()
{
..............
}
···

知識は、いくつかのリファレンスページへの参照を学び、ここに示したリンク
[ http://blog.sina.com.cn/s/blog_61ba4898010153zu.html ]

おすすめ

転載: www.cnblogs.com/ldc175206/p/11569792.html