AUTO on Mac のエラー

Mac で AUTO を実行しようとした時に起きたエラーの解決策.


エラー 1 : /usr/bin/ld: Undefined symbols : _main

$ auto
AUTO> ld("ab")
AUTO> run()
make: [ab.o] Error 1 (ignored)
...
/usr/bin/ld: Undefined symbols:
_main
collect2: ld returned 1 exit status
make: [ab.exe] Error 1 (ignored)
make: ./ab.exe: Command not found
make: [run] Error 127 (ignored)
..




とりあえずの解決法
次のように Makefile を編集し,make した後で auto を実行すると解決する.

Makefile の編集.


EXE = $(PGM).exe
の行を,
EXE = ./$(PGM).exe
と書き直す.



解決法(AUTO のコマンドをいじる)
失敗時(AUTO> run() でのコンパイルメッセージ)

gcc -D_THREAD_SAFE -DPTHREADS -O -I/Users/hoge/prog/auto/include -c ab.c
gcc -D_THREAD_SAFE -DPTHREADS -O -I/Users/hoge/prog/auto/include ab.o -o ab.exe -L/Users/hoge/prog/auto/lib -lauto -lauto_f2c -lm
成功時($ make でのコンパイルメッセージ)

gcc -pthread -DPTHREADS -O -I/Users/hoge/prog/auto/include -c -o ab.o ab.c
gcc -pthread -DPTHREADS -O -I/Users/hoge/prog/auto/include ab.o -o ab.exe /Users/hoge/prog/auto/lib/*.o -L/Users/hoge/prog/auto/lib -lauto_f2c -lm

を比べると,
/Users/hoge/prog/auto/lib*.o を読み込んでいないのが,エラーの原因であることが分かる.

AUTO> run() をした時に,実行されている make のための Makefile は,
$(AUTO_DIR)/cmds/cmds.make を使っているらしいので,
このファイルの LIBS に,$(AUTO_DIR)/lib/*.o を追加する.
20行めくらい?

LIBS = -L$(AUTO_DIR)/lib -lauto -lauto_f2c -lm
↓編集後
LIBS = $(AUTO_DIR)/lib/*.o -L$(AUTO_DIR)/lib -lauto -lauto_f2c -lm




エラー 2 : plot できず?

これは,他のが原因だったかもしれない.
一応,これだけはやっておいたらいいかも.

$ python
>>> import Tkinter


以下,おそらく不要.
tkinter のインストール
http://people.ucsc.edu/~jacobkm/tkinter_osx_howto.html

1. Install Fink.
2. Add "unstable/main" to the "Trees:" line in /sw/etc/fink.conf
3. From the command line:

[localhost:~] jacob% fink selfupdate
(say yes to "packages from CVS")
[localhost:~] jacob% fink install xfree86-base (なし)
[localhost:~] jacob% fink install xfree86-rootless (なし)
[localhost:~] jacob% fink install windowmaker
[localhost:~] jacob% fink install python (2.5 をインストール? 2.3 以下じゃないと,AUTO 動作に問題あるらしいので,在れば不要)

4. Make sure XDarwin is running (run /Aplications/XDarwin)
5. From the command line:

[localhost:~] jacob% python
>>> import Tkinter
>>> #YAY!