g++のコンパイルとリンクの初歩的な分析


head.cpp
#include<iostream>
using namespace std;
void hello(){
	cout<<"say hello!"<<endl;
}

ヘッダファイルを提供します.h
void hello();

プライマリファイルrun.cpp
#include "head.h"
int main()
{
	
	hello();
	return 0;
}

1.コンパイルしてからリンクする
g++ -c head.cpp , g++ -c run.cpp
-cを加えると各cppが個別にコンパイルされます.メインファイルはリンクがない前に各関数を定義するだけでコンパイルが完了することに注意してください.このディレクトリのheadを参照してください.h関連定義を見つけてコンパイルを完了する.
g++ -o run run.o head.o
-oパラメータは実行可能ファイルを生成し、リンクする.oファイルまたはcpp成を先にコンパイルする.oファイルの後にリンクします(.oと.cppは同時にパラメータを混用することもできます).デフォルトでは-cを付けないとリンクされます.
リンクするときrun.oのhelloは実際の定義を見つけ、グループが実行可能ファイルを合成した.
2.コマンドコンパイルリンク
g++ -o run run.cpp head.cpp
リンクステップがあるため、各関連cppは、リンクのためにパラメータを含んでコンパイルされます.
3.カスタムヘッダファイルの場所
プライマリファイルを
#include "head.h"

に改心
#include <head.h>

g++は現在のディレクトリでheadを検索しません.h,/usr/inludeでのみ検索(デフォルト).
この場合、-I{path}パラメータに追加の検索アドレスを追加します.これはhead.hは現在のディレクトリにない場合に役立ちます.
本例ではg+-o run runと書くべきである.cpp head.cpp -I./
./現在のディレクトリを表示
4.カスタムライブラリファイルの場所
私たちは普段、プログラムを書くときに多くのライブラリファイルをincludeしています.これらのファイルは通常、ソースファイルではなくターゲットファイルです.これにより、再コンパイルの手間が省けます.また、1つのライブラリは通常、複数のターゲットファイルをパッケージ化し、1つのヘッダファイルを通じて使用を指導します.g++はデフォルトでライブラリを検索しますが、検索できないものは手動で指定します.Linuxでライブラリファイルは常にlibで始まる.aまたは.soで終わりました.-lパラメータはlibmなどの検索する名前を指定する.aは-lmと書くことができ、ディレクトリが異なる場合はパラメータ-L{path}を用いることができる.
やってみたら、私はまたあまり悪くないhelloを書いた.cpp、それに応じてhelloを修正しました.h,run.cppで調整しました.
ar crv libhello.a hello.o hello2.oコンテンツテーブルをパッケージ化して生成することができる(ranlibコマンドは、コンテンツテーブルを個別に生成することができる).
nm libhello.aこのライブラリで使用できる関数を表示できます.
そしてg++コマンドです.-lと-Lを加えるとokです.
g++ -o run run.cpp -L./  -lhello -I./