Comments on super linux programing
はじめに 図書館で借りた、「c言語によるスーパーlinuxプログラミング」という本の返却期限が近づいているのでさっさとまとめておきたいと思う 1章:c言語の位置づけ cを勉強することでプログラムの動きをマシンレベルでイメージすることができるからいいよねと。ただし、記述は非常に具体的になる。それでは面倒なことが多いと。そういう理由から「高級言語」が開発されたと。スクリプト言語ともいう。どの言語を使うかは何を開発したいか?に依存するわけですね。システムだったらc/c++,webだったら、jsとかね。適材適所が大事ってこと。 strace python だけでもシステムコールがたくさん呼び出されることからも、pythonがインタープリタ言語であることがわかる。 この辺の続きを詳しく知りたければ、「linuxの仕組み」という本を読むことをお勧めします。 2章:ubuntuの導入 ubuntuはまだ一般的になっていません。と。いえ、もう一般的になっています。既知の事実がつらつらと書かれているだけですね。 3章:大規模プログラミングとライブラリの利用 複数の開発者による並行開発を実現するには、アプリケーションの分割は必須の技術。ライブラリの利用は分割プログラミングのゴール。 改めてc/c++プログラムのビルド工程 プリプロセッサによるファイルのインクルードやマクロの展開(プログラム中で#でかかれている所) アセンブラへの展開とアセンブル作業によるオブジェクトコードへの変換 オブジェクトファイルの結合やライブラリとのリンクを実施 で、コンパイルってのは「実行ファイルを作る」って意味で使われるけど、どっちかっていうと、「オブジェクトファイルを作る」って意味だな。で、ビルドが「実行ファイルを作る」だな。うん、 だから、「分割コンパイル」ってのは、どっちかというと、分割ビルド ≒ 分割したファイルをコンパイルしてリンクするってかんじ。 ライブラリの種類についてもここで説明されているので、チョットやります。 ライブラリの種類とリンク ビルド ≒ コードをコンパイルしてオブジェクトファイルの生成 + ライブラリのリンク なわけだけれど、ライブラリにはスタティックリンクとシェアードリンクの2種類があると。で、共有ライブラリのリンクはさらに、 実行形式のメモリへのロード時にリンクされる、動的リンクライブラリ 必要に応じてメモリへロード、リンクされる、動的ローディング の二つがある。 ldd ./binary で調べられるんですね。便利ですね。 んで、ライブラリをリンクする時ってのは、ライブラリが提供する関数を使いたいときだと思うんですけど、この、関数の仕様(インターフェース)がどうなっているか?を知る方法が、ヘッダーファイルなんですよねー。そうなんですよ、まさに。 だからヘッダーファイルには定義はかかないんですよね。引数と返り値だけなんです。 自分で共有ライブラリを作る方法 まずは、mainがない、関数だけの.cppと.hppを作る。 -fPICオプションをつけてコンパイルする。この時、.oファイルができる。 e.g., mylib.o g++ -shared -o libmylib.so mylib.o でshared-libraryができる。 ヘッダーファイルと作ったshared-libraryを/libにおいて完了。あとは、コンパイル時に-lmylibってつけることを忘れずに。ライブラリのリンクでよく忘れるやつね。大事だから。 g++ -o myapp myapp.cpp -L/path/to/library -lmylib でコンパイルできるよーって話ね。あと大事なの。 ...