@[nn] なかんじの *.dll を gcc/cygwin でコンパイル

某製品で公開されている AAA.lib, AAA.dll があって, 関数 FFF を呼び出す test.c を書いた.
gcc/cygwinコンパイルしたいのだけどリンクがうまくいかないという状況.

$ gcc test.c -L. -lAAA
test.o: test.c:(.text+0xbf): undefined reference to `_FFF`
$ nm AAA.lib |grep FFF
00000000 T _FFF@24
00000000 I __imp__FFF@24
$ nm AAA.dll
nm: AAA.dll: no symbols

@[nn] がダメな感じ. dlltools を使えばいいようなことが書いてるところをちらほらみつけたが, dll が "no symbol" ではない雰囲気. -D で AAA.lib を渡しても同じ.

$ echo EXPORTS > AAA.def
$ nm AAA.lib | grep 'T _' | sed 's/^.* T _//' >> AAA.def
$ dlltool -k -d AAA.def -D AAA.dll -l libAAA.a
$ nm libAAA.a | grep FFF
00000000 T _FFF@24
00000000 I __imp__FFF@24
$ dlltool -k -d AAA.def -D AAA.lib -l libAAA.a
$ nm libAAA.a | grep FFF
00000000 T _FFF@24
00000000 I __imp__FFF@24
$ gcc test.c libAAA.a
test.o: test.c:(.text+0xbf): undefined reference to `_FFF`

@[nn] がなければコンパイルは通る.

$ echo EXPORTS > AAA.def
$ nm AAA.lib | grep 'T _' | sed 's/^.* T _//' | sed 's/@.*$//' >> AAA.def
$ dlltool -k -d AAA.def -D AAA.dll -l libBBB.a
$ nm libBBB.a | grep FFF
00000000 T _FFF
00000000 I __imp__FFF
$ gcc --mno-cygwin test.c -L. -lBBB

実行すると libBBB.a と AAA.dll の対応がとれてないから, "a.exe - エントリポイントがみつかりません".


公開されているヘッダファイルをみると(08/07追記),

#if hogehoge
#    define M_DECL __stdcall
#else
#    define M_DECL
#endif
extern int M_DECL FFF();

hogehoge を定義すればいけた. 上記の dlltool とか不要...

$ cpp -dM /dev/null | grep stdcall
#define _stdcall __attribute__((__stdcall__))
#define __stdcall __attribute__((__stdcall__))

条件付き制御構造

以下の全ての \if...文は 対応する \fi で終了する

一般形 【\if...<条件><条件成立時の実行文>\else<条件不成立時の実行文>\fi】
          ( \else<条件不成立時の実行文> 部分は省略出来る ) (p.207)

\if--- \fi 構文の nesting は {...} の nesting とは独立 

(p.209-210)
【\ifnum<整数1><関係><整数>】 2 整数の大小比較  関係は <,=,> の 3種
【\ifdim<実数1><関係><実数>】 2 単位附き実数の大小比較  関係は <,=,> の 3種
                               【例】 \ifdim \hsize>100pt ... \fi
【\ifodd<整数>】 整数が奇数かどうかの判定

【\ifvmode】 TeXが v-mode か internal v-mode にあるかどうかの判定
【\ifhmode】 TeXが h-mode か internal h-mode にあるかどうかの判定
【\ifmmode】 TeXが math-mode か display math-mode にあるかどうかの判定
【\ifinner】 TeXが internal v-mode, restricted h-mode, (nondisplay) math-mode の
            いずれかにあるかどうかの判定

【\if】 2つの token が同じ character code を持つかどうかの判定
            (その際 category code の差は無視される)
【\ifcat】 2つの token が同じ category code を持つかどうかの
             判定(その際 character code の差は無視される)  関連命令 \noexpand
【\ifx】
 2つの token が同じかどうかの判定(成立条件は TeXbook Chap.20 p.210 を参照)

【\ifvoid<整数>】 整数に対応する box register が 空   かどうかの判定
【\ifhbox<整数>】 整数に対応する box register が hbox かどうかの判定
【\ifhvox<整数>】 整数に対応する box register が vbox かどうかの判定
【\ifhvox<整数>】 整数に対応する box register が vbox かどうかの判定

【\ifeof<整数>】 整数は 0-15. 整数に対応する入力ファイルが open されていないか,
                又はファイルが読み終っているとき成立

【\iftrue】  必ず成立
【\iffalse】 必ず不成立


【\ifcase<整数>\or\or...\else\fi】(p.210)
        条件分岐. 整数値 m が 0 から n 迄の時は textm が実行される
        それ以外は  が実行される. \else 以下は無くてもよい


【\loop<実行文1><\if...<条件>><実行文2>\repeat】 (p.217)
        <\if...<条件>>部は \fi 無し
        まず<実行文1>を実行,次に<条件>成立なら<実行文2>を実行し,又<実行文1>に
        戻る...
        途中で<条件>が不成立になったらループから抜ける

【その他】 \newif (p.211)
http://www.is.titech.ac.jp/~mase/latex.hlp

OOoLatex

OOoLatex is a set of macros designed to bring the power of LaTeX into OpenOffice.

OOoLatex, get the power of LaTeX into OpenOffice !

OpenOffice 上で数式いれるのが楽になりますよマクロです.

install

http://ooolatex.sourceforge.net/
-> Download
-> OOoLatexMacro-v3.0 -> OOoLatexMacro-test5.tar.gz

% cd /tmp
% tar xvzf OOoLatexMacro-test5.tar.gz
% ls OOoLatexMacro-test5/
ChangeLog README bin/ macro-2.0/
# mv OOoLatexMacro-test5/ /usr/local (どこでも良い)
% cp /usr/local/OOoLatexMacro-test5/bin/example.tex .
% /usr/local/OOoLatexMacro-test5/bin/OOoLatex example.tex
% ls example.*
example.aux example.dvi example.out example.ps
example.bbx example.log example.png example.tex

example.png ができていればとりあえずおけ.

Latex や ghostscript があらかじめインストールされている必要があるようですが, もともと入っていたので本当のところはわかりません.

OpenOffice から

マクロの登録
  • メニューの[ツール(T)]->[マクロ(M)]->[マクロの管理(O)]->[OpenOffice.org Basic...]->
    • [管理(O)...]ボタン->[ライブラリ]タブ->[インポート(I)...]ボタン-> "/usr/local/OOoLatexMacro-test5/macro-2.0/script.xlb" 選択 -> [OK]ボタン -> [閉じる]ボタン
    • 左[マイマクロ]->左[OOoLatex]->左[OOoLatexEquation]->右[main]->[実行]ボタン -> "Cannot find (略)" -> "/usr/local/OOoLatexMacro-test5/bin" -> [save]ボタン
マクロの実行
  • メニューの[ツール(T)]->[マクロ(M)]->[マクロを実行(U)...]
    • 左[マイマクロ]->左[OOoLatex]->左[OOoLatexEquation]->右[main]->[実行]ボタン -> latex な入力 -> [latex]ボタン

で, 入力した数式の画像が現れます. その数式を編集したい場合には選択した状態でマクロを実行する.

# インストールディレクトリが作業ディレクトリになるためアクセス権が必要なようです.

ショートカットキー

やらなくてもいいですが,ここでやられていました. 便利.

(未稿)

http://www.cs.e.dendai.ac.jp/~tsuji/ooolatex.html
再編集(08/07/24)

もう一度数式オブジェクト?を選択しなおして OooLaTeX を実行すると編集できます.

が, OpenOffice を再起動すると編集できなくなりました. なので LaTeX のソースはどこかに残しておくほうがいいのかもしれません.

エラーメッセージ(08/07/24)
The selected object is not an OOoLatex equation...
Please unselect it and call the macro again...

数式オブジェクト以外のものを選択して OooLaTeX を実行しているのが原因. 新規に作成したい場合にはどこも選択していない状態を作ってからマクロ再実行。再編集の場合には編集したい数式を選択してから再実行。

数式を選択していてもこのエラーがでるようなら、もう再編集は不可?

フォント

OpenOffice で資料を作成したらフォントがおかしいと指摘されたくりました.
私は見れればなんでも良い人間なので放置していたのですが, ちっと調べてみました.

MS フォント

◆MSゴシック

まぁ無理だろうと思っていたのですが、別件で検索していたらヒットしました。
MS-Windows の Font ディレクトリから msgothic.ttc
/usr/X11R6/lib/X11/fonts/TrueType/
にコピーし、同じディレクトリにある font.dir に以下のように書き加えて、頭の数字に書き
加えた行数を足し、Xを再起動すればOKです。
fonts.dir
(ここでは、msgothic.ttc を msgothic.ttf とリネームしています。)

http://www.ceres.dti.ne.jp/~yasukomi/thinkpad/linuxx22.htm

c:\windows\fonts 配下にそれっぽいファイルがあります.
エクスプローラーでみると, 普段「名前」となっている列が「フォント名」になっていて, 「MS ゴシック&MS P ゴシック & MS UI Gohtic」 がファイル名 msgothic.ttc


% mkdir -p ~/.fonts/ms
% cp msgothic.ttc ~/.fonts/ms/msgothic.ttf
% fc-cache -fv

fc-cache すれば X の再起動は不要です.
これで使えるようになる感じですが, ライセンス上問題があるようなので他のフォントにいきます.

とりあえず削除しましょう.

% rm -fr ~/.fonts/ms
% fc-cache -fv

IPA フォント

最近知ったんですが、IPAフォントなるものがあるんですね。独立行政法人情報処理推進機構が配布しているフォントで、無料で使えるみたいです。ライセンスはGPLではないですが、ざっと目を通したところ改変しなければ再配布も許可されるみたいですね。

http://blog.goo.ne.jp/heartbreaker-_-/e/7130400ad0aa72343e70738ae60e8831

こっちを入れてみます.
IPAexフォント/IPAフォント | IPAフォントのダウンロードサイトです からダウンロード.

% mkdir -p ~/.fonts
% (cd ~/.fonts;  unzip /..../IPAfont00203.zip)
% fc-cache -fv

カーネルの再構築

カーネルを 2.6.25.6 にアップグレード/再構築してみました. 詳細はまた別途.

  • 輝度調整できるようになった (spicctrl).
  • wireless LAN が使えなくなった.
  • hotkey は反応している感じがする.
  • サスペンドハイバネーション ok
  • 外部ディスプレイ出力 ok

無線LAN 以外はよさげな感じです.

追記 6/11

以下のエラーを出力して, ipw3945d がうごきませんでした.
対処できなかったので, 元に戻しました.

% modprobe ipw3945
Not starting ipw3945 regulatory daemon, driver not loaded. 

nice/renice コマンド

存在は知っていたけど,
必要はなかったので使ったことがありませんでした.

% man nice
nice(1)                                                                nice(1)



名前
       nice - スケジュール優先度を変更してプログラムを実行する

書式
       nice  [-n  adjustment] [-adjustment] [--adjustment=adjustment] [command
       [arg...]]

       nice [--help] [--version]

説明
       引数なしで実行すると、 nice は自身が継承したスケジューリング優先度を 表
       示 する。それ以外の場合には、 nice はスケジューリング優先度を調整してか
       ら与えられた command を実行する。


とのことなのでやってみますと, 以下のようなエラー.

% echo $SHELL
/bin/tcsh
% nice -n 5 date
nice: Badly formed number.
% nice --help
nice: Badly formed number.
% which nice
nice: shell build-in command.
% renice 
usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]

tcsh の build-in なので nice(1) (** /usr/bin/nice) とは別物らしいです.

priority には +/- が必須.
bash なときは manpage に従えば良い.

% nice +5 date
Mon Jun  9 17:00:00 JST 2008
% bash
$ nice -n 5 date
Mon Jun  9 17:00:00 JST 2008

その他

% top

....

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      15   0  1944  644  552 S  0.0  0.1   0:01.12 init
    2 root      34  19     0    0    0 S  0.0  0.0   0:00.20 ksoftirqd/0
    3 root      10  -5     0    0    0 S  0.0  0.0   0:00.02 events/0
% ps -eo pid,ni,comm
  PID  NI COMMAND
    1   0 init
    2  19 ksoftirqd/0
    3  -5 events/0

NI が優先度の項目. nice の頭文字.

参考 URL

http://www.drk7.jp/MT/archives/001333.html
http://x68000.q-e-d.net/~68user/unix/pickup?nice
http://x68000.q-e-d.net/~68user/unix/pickup?renice

Google 先生に聞くときには nice より renice のほうが noise が少なくて良ろし.