lubuntuを使ってLFS7.1に挑戦する(その3)

その2からの続き

5.15. Ncurses-5.9

5.16. Bash-4.2

bisonをインストールして再トライ

5.17. Bzip2-1.0.6

5.18. Coreutils-8.15

5.19. Diffutils-3.2

5.20. File-5.10

5.21. Findutils-4.4.2

5.22. Gawk-4.0.0

5.23.1. Installation of Gettext

5.24. Grep-2.10

5.25. Gzip-1.4

5.26. M4-1.4.16

5.27. Make-3.82

5.28. Patch-2.6.1

5.29. Perl-5.14.2

5.30. Sed-4.2.1

5.31.1. Installation of Tar
make checkで8Gのファイルを作ろうとする。

5.32. Texinfo-4.13a

5.33. Xz-5.0.3

つづく

コマンドラインのオプションの基礎

オプションとオペランド

上のコマンドにおいて -o をオプション、op をオペランドという。

ハイフン2つで始まるオプションをロングオプションという。ロングオプションはマニュアルに記載されてなくても、ある程度まで短くできる場合がある。

以下のような共通に使える場合がおおいロングオプションがある。
‘–help’
へプルを表示
‘–version’
バージョンを表示
‘–‘
次にくる引数をオプションじゃないように解釈する。次の例はファイル名が -r のものを削除する。

– だけのオプションは基本的には標準入力を表す。標準出力を表す場合もある。以下の2つは同じ

lubuntuを使ってLFS7.1に挑戦する(その2)

(その1)からの続き

p39 5.8. Adjusting the Toolchain

ここまでで一時的な環境は整った。ここからのツールのコンパイルはこの環境に対してリンクする。

ここまでちゃんとできているかチェックする。

上のように表示されていれば無問題

5.9. Binutils-2.22 – Pass 2

今回はホストのGCCとツールを使わずに、今までつくったやつでやる。

よく分からん

5.10. GCC-4.6.2 – Pass 2

パッチを当てる。

fixincludesスクリプトを実行しないようにする。

-fomit-frame-pointerをつける

これからビルドするGCCが/libや/usr/includeを見ないようにする。

コンフィグする。

–enable-clocale=gnu
ただしいgnuロカールモデルを選択する。
–enable-__cxa_atexit
スタティックなインスタンスのデストラクタのための関数らしい。
–disable-bootstrap
デフォルトでは3回コンパイルするらしいのをしないようにする。

ダイナミックリンカが/tools/lib/ld-linux.so.2を読み込むようになった。

5.11. Tcl-8.5.11

TclとこれからインストールするExpect, DejaGNU, Checkはテストツールで使われるのでインストールする。

テストしてインストール

後でデバッグシンボルを削除するから書き込めるようにするらしい

TCLのヘッダをインストールする。Expectが使う。

シンボリックリンクを張る。

5.12. Expect-5.45

対話型インタプリタと会話するツール

configureが/usr/local/bin/sttyを見ないで/bin/sttyを見るようにする。

configureする。

インストールする。

補助的なスクリプトはインストールしない。

5.13. DejaGNU-1.5

5.14. Check-0.9.8

make checkに時間がかかる。

まだ続く。

lubuntuを使ってLFS7.1に挑戦する(その1)

ここではVMWareを使っている。x64のことは考えていない。

lubuntuをインストールして、新規にハードディスク(ここでは8G.vmdkという名前にする)を追加する。このディスクがLFS用になる。lubuntuのインストールはキーボード設定以外は英語で行った。

(注意:ハードディスクはIDEを選択すること。SCSIでやってはまった。
VMWareでlubuntuにハードディスクを追加して起動したところから始まる。
もろもろの資料はここにある。

最初にこのディスクをext3でフォーマットする。追加したディスクがどの/dev/になるかはfdisk -lなどで確認する。
ここでは/dev/sdbになっている。

rootでログイン

ext3をsdbに作成
(ここ間違え、/dev/sdbじゃなくて/dev/sdb1にしないといけない。fdisk /dev/sdbしてパーティションを最初につくっていないといけない)

マニュアルではswapや/homeを別のパーティションに分けることを推奨しているがここではスルー。

このファイルにパッケージのURL一覧がある。

たくさんダウンロードする

ないファイルやダウンロード失敗があるかもしれないのがこのmd5チェックが成功するまで頑張る。
ないファイルは他の場所から探す。

ユーザとグループ lfs を作成

-k /dev/nullはスケルトンを参照しない

lfsでログイン

スケルトンを参照しないのでここでbashを起動

set +h はPATHのハッシュを無効にする。

p32 5.4. Binutils-2.22 – Pass 1

Binutilsにはリンカやアセンブラなどオブジェクトファイルを扱うツールが入っている。

lubuntuにgccが入ってないので入れる。一般ユーザに戻ってからインストールしてまたlfsユーザに戻る。

もう一回、今度は成功してMakefileができた。

–target=$LFS_TGTはこのbinutilsがクロスコンパイラ用であることを示す。
–prefix=/tools インストールする場所、実際には/lfs/tools
–disable-nls i18n機能を無効化、このbinutilsは一時的なものなので
–disable-werror 警告を無効

メイクする、が、またmakeが入ってないのでインストール(記述は省略)

インストールする。/toolsに入るためlfsユーザのままでいいはず

p34 5.5. GCC-4.6.2 – Pass 1

なんか知らないがクロスコンパイル用でエラーが出ないためのパッチを当てる、が、またpatchがないのでインストールしてからやる。

ビルドは別のディレクトリでやる

configureする

–disable-shared スタティックリンクする
–enable-languages=c Cコンパイラだけビルドする
そのほかいろいろ無効にする。

メイクする

–disable-sharedでコンフィグしたのでlibgcc_eh.aが作られない。これはGlibcが内部的に使うのでlibgcc.aにシンボリックリンクを張ることで回避する。libgcc.aにはlibgcc_eh.aの内容が入っている、らしい。

p.36 5.6. Linux-3.2.6 API Headers

GlibcのためにカーネルAPIを公開する。

.configとかを削除してきれいにする。

カーネルヘッダをエクスポートする

p37 5.7. Glibc-2.14.1

Glibcをインストールする。Cの基本的な機能を提供する。

パッチを当てる。

コンフィグする。

メイクする。

エラーが出た、gwakをインストールして再トライ(コンフィグから)

インストールする。

長いのでとりあえずここまで。また続く

char*とwchar_t*を両方受け取れる関数をテンプレートで書く

ネタ元。traitsクラスをテンプレートの特殊化でcharとwchar_t用を用意する。汎用型は用意しないのでこの2つの型でしか使えない。

Win32APIでファイルをゴミ箱に移動する

SHFileOperationを使う。

1つのファイルだけで試した。フォルダの場合は試していない。ファイルが複数ある時はNULで繋げて最後をダブルヌルにする。1個の場合でもダブルヌルにしなくてはならないので面倒くさい。

Windowsでシステムグローバルでブール値をもつ

イベントオブジェクトを使った。グローバルといってもセッション(ユーザのログイン)でのみ一位性を保持する。読み出した値は一時的なもので次の瞬間には変わってることもありえる。同じオブジェクトの==の比較がfalseになることもある。

また、ある名前のオブジェクトを使っているプロセスが全部死んだからfalseになる。というか消える。状態を維持するには最低1つのアプリがこの変数を持っていなければならない。

実際の使い道はほとんどない。

mfc100u.dll が見つからなかったため、このアプリケーションを開始できませんでした。

このエラーが出たら、
Microsoft Visual C++ 2010 ランタイムライブラリ(32ビット)(64ビット)(←OSじゃなくて実行するアプリにあわせる。大体の場合32ビット)をダウンロードしてインストールします。

MySQLのテーブルからHTMLフォームを自動でつくってくれるFormitable

HTMLの<form>をつくるのはめんどくさい作業です。つい書こうとするといろいろ忘れていて同じことをなんども調べなければならなくなります。phpスクリプトのFormitableをつかうとmysqlからテーブル情報をもってきてそれをもとのHTMLフォームを自動でつくってくれます。

ここではもっとも簡単な使い方を紹介しますが、データベースやテーブルの作り方は省略します。ここではデータベースmydemo、テーブルmydemoがあるとします。

まずFormitableをダウンロードして解答して、”Formitable.class.ph”pサーバの適当な場所に置きます。

つぎに同じディレクトリに以下のようなPHPファイルを作ります。

ブラウザでこのファイルを開くと、フォームが表示されます。HTMLは以下のようになっていました。

Formitableはすごく機能が豊富ですが、ここではこれを得られれば充分とします。

WindowsのGUIアプリにデバッグ用のコンソールを使う

アプリの最初でAllocConsoleを呼ぶ。これでコンソールが表示される。1アプリにつき1コンソールしかもてない。

コンソールに表示したい文字列を以下のように実行する。

この関数、引数は同じなのにもかかわらずAとWがあるということは、内部でうまく変換してくれるのだろうか。
ここでは試していない。
WriteConsoleの代わりにWriteFileでもいい。これならルーチン化してログをファイルにとる場合でも使えるようになる。
アプリの最後にFreeConsoleを呼んで開放する。

ただし問題もある。このプロセスが作られる際に標準ハンドルの継承など普通の起動のさせ方でない場合、この方法がうまくいかない場合がある。よってちゃんとつくるなら、それを調べるか、あるいは自分でウインドウをつくってやるしかない。