macOS上でrogue 5.4をやりたかったんだけど...
いまのところうまくコンパイルできないので
いったんRogue Clone IIをやってみることにする。
macOS上で、ソースコードからコンパイルしてrogueをやりたいんだなあ。
ターゲットは
・Rogue 5.4(.5p/x)
・Rogue Clone III(p)
なのだが、たしかに日本語版も捨てがたし。
コンパイルの仕方も書いてくれているので……。
こっちは上手くいくか?
1)gitのインストール
brew install git
2)Githubからダウンロード
git clone https://github.com/suzukiiichiro/RogueClone2s-UTF8_JP.git
ディレクトリに入る
cd RogueClone2s-UTF8_JP
コンパイル Mac系 ------------------------------------
./configure CFLAGS="-g -O2 -w -Wno-return-type" LDFLAGS="-lcurses -liconv"
make clean
make
ld: 24 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [rogue] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
とここでチーン。
clangのerrorが共通なので、ここを探求するとなんとかなるのではないか。
素人旅はつづく。
3)gccを入れる
Macのgcc, g++をHomebrewを使って最新版にする - Qiita
を参考にしつつ、xcode由来ではなく、brew由来のgccに入れ替える
$ ls /usr/local/bin | grep gcc
$ ls /usr/local/bin | grep g++
上記コマンドで見つかったgcc-8とg++-8がお目当てのエイリアスです。
見つかったエイリアスに対してシンボリックリンクを貼ってあげましょう。
$ ln -s /usr/local/bin/gcc-8 /usr/local/bin/gcc
$ ln -s /usr/local/bin/g++-8 /usr/local/bin/g++
最後に~/.bash_profileの良い感じの場所に以下の記述をして、優先順位高めのパスを通したら終了です。
export PATH=$PATH:/usr/local/bin
でも駄目。
ld: 24 duplicate symbols for architecture x86_64
collect2: error: ld returned 1 exit status
make[2]: *** [rogue] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
#export PATH=$PATH:/usr/local/bin
$ unlink /usr/local/bin/gcc
$ unlink /usr/local/bin/g++
とシンボリックリンクも外しておく
ふう……
4)Naohiro Aota氏版をインストール
GitHub - naota/rogueclone2s-utf8: UTF-8版 RogueClone
macOSでデータ分離版ローグ(Rogue)を遊ぶ。 - leopardgeckoのブログ
ここに手順は書いてあるので、そのとおり。
$ ./configure CFLAGS="-g -O2 -w" LDFLAGS="-lcurses -liconv"
$ make
$ make install
なんかエラー出たかな?忘れてしまった。
/usr/local/bin/rogue
ばっかりできてくるので、roguecl2sという名前に変えて
.bashrcを
# 日本語版rogue clone II
function myroguecl2s() {
export ROGUEOPTS="directory=~/Documents/200400_playrogue/roguecl2s";
pushd ~/Documents/200400_playrogue/roguecl2s/;
roguecl2s /usr/local/share/rogue/mesg $@;
popd;
}
alias roguecl2s=myroguecl2s
とした。
しかし、スコアがうまく表示されないんだよなあ。ゲームは動く。
→なんでかわからんけど、スコアも表示されるようになっていた。なんでだ??
rogue -sではうまくスコアが出ないけど、死んだときのスコアはうまく出る。
5)鈴木維一郎氏のUTF-8に戻る(1)
ld: 24 duplicate symbols for architecture x86_64
というのは、要はutf8lenとutf8strlenの変数が、
被っているというエラーで。
各ソース(*.c)のint utf8lenとint utf8strlenを、
static int utf8len / static int utf8strlenに変えて回ったけれども
そういう問題ではないらしい。
コンパイルは通ってバイナリはできたけど、日本語が表示されなかった。
素人旅は続く……。
6)鈴木維一郎氏のUTF-8のコンパイル(リンク)が通らない問題。
int utf8len()とint utf8strlen()の関数が、ソースのあちこちにあって
(display.c init.c ……)。
関数は基本的にファイルの外でも参照できるので、
それがぶつかっておるということらしい。
(後学のため、後ろに貼っておく)
ほんじゃらということで、display.cいがいの*.cにある
utf8len()とutf8strlenを全部コメントアウトしてみた。
いちおうコンパイルは通り、バイナリはできて、
$ ./rogue ./mesg_E
などとすると英語で動いてはいる
(アイテムリストとかオプション画面は崩れる)。
どうやらちがうらしい。
7)鈴木維一郎氏のオリジナルのMakefileを見ていると
libxml2が入っているようだったのでインストールして、
PATHを通してみた。これも関係なし。
8)KMCの伊藤康史氏版
コンパイルはできたけど、日本語がうまく出ない。
Makefile.nixを
CC = gcc
CFLAGS = -O -g -w -Wno-return-type -DUNIX -DUNIX_BSD4_2 -DUNIX_386BSD -DCURSES -DJAPAN -DEUC -DTOPSCO -DCOLOR
にしておけば、バイナリを作るところまではできる。
termcapを手元において
$ export TERMCAP="./termcap"
$ ./rogue ./mesg
とか。
ということで、Rogue Clone IIの日本語版はギブアップ。
-----------
鈴木維一郎氏版の、コンパイルエラー。ついに解消できず……。
$ make
/Library/Developer/CommandLineTools/usr/bin/make all-recursive
Making all in doc
make[2]: Nothing to be done for `all'.
Making all in man
make[2]: Nothing to be done for `all'.
Making all in msg
make[2]: Nothing to be done for `all'.
Making all in src
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-display.o -MD -MP -MF .deps/rogue-display.Tpo -c -o rogue-display.o `test -f 'display.c' || echo './'`display.c
mv -f .deps/rogue-display.Tpo .deps/rogue-display.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-hit.o -MD -MP -MF .deps/rogue-hit.Tpo -c -o rogue-hit.o `test -f 'hit.c' || echo './'`hit.c
mv -f .deps/rogue-hit.Tpo .deps/rogue-hit.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-init.o -MD -MP -MF .deps/rogue-init.Tpo -c -o rogue-init.o `test -f 'init.c' || echo './'`init.c
mv -f .deps/rogue-init.Tpo .deps/rogue-init.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-invent.o -MD -MP -MF .deps/rogue-invent.Tpo -c -o rogue-invent.o `test -f 'invent.c' || echo './'`invent.c
mv -f .deps/rogue-invent.Tpo .deps/rogue-invent.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-level.o -MD -MP -MF .deps/rogue-level.Tpo -c -o rogue-level.o `test -f 'level.c' || echo './'`level.c
mv -f .deps/rogue-level.Tpo .deps/rogue-level.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-machdep.o -MD -MP -MF .deps/rogue-machdep.Tpo -c -o rogue-machdep.o `test -f 'machdep.c' || echo './'`machdep.c
mv -f .deps/rogue-machdep.Tpo .deps/rogue-machdep.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-main.o -MD -MP -MF .deps/rogue-main.Tpo -c -o rogue-main.o `test -f 'main.c' || echo './'`main.c
mv -f .deps/rogue-main.Tpo .deps/rogue-main.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-message.o -MD -MP -MF .deps/rogue-message.Tpo -c -o rogue-message.o `test -f 'message.c' || echo './'`message.c
mv -f .deps/rogue-message.Tpo .deps/rogue-message.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-monster.o -MD -MP -MF .deps/rogue-monster.Tpo -c -o rogue-monster.o `test -f 'monster.c' || echo './'`monster.c
mv -f .deps/rogue-monster.Tpo .deps/rogue-monster.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-move.o -MD -MP -MF .deps/rogue-move.Tpo -c -o rogue-move.o `test -f 'move.c' || echo './'`move.c
mv -f .deps/rogue-move.Tpo .deps/rogue-move.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-object.o -MD -MP -MF .deps/rogue-object.Tpo -c -o rogue-object.o `test -f 'object.c' || echo './'`object.c
mv -f .deps/rogue-object.Tpo .deps/rogue-object.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-pack.o -MD -MP -MF .deps/rogue-pack.Tpo -c -o rogue-pack.o `test -f 'pack.c' || echo './'`pack.c
mv -f .deps/rogue-pack.Tpo .deps/rogue-pack.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-play.o -MD -MP -MF .deps/rogue-play.Tpo -c -o rogue-play.o `test -f 'play.c' || echo './'`play.c
mv -f .deps/rogue-play.Tpo .deps/rogue-play.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-random.o -MD -MP -MF .deps/rogue-random.Tpo -c -o rogue-random.o `test -f 'random.c' || echo './'`random.c
mv -f .deps/rogue-random.Tpo .deps/rogue-random.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-ring.o -MD -MP -MF .deps/rogue-ring.Tpo -c -o rogue-ring.o `test -f 'ring.c' || echo './'`ring.c
mv -f .deps/rogue-ring.Tpo .deps/rogue-ring.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-room.o -MD -MP -MF .deps/rogue-room.Tpo -c -o rogue-room.o `test -f 'room.c' || echo './'`room.c
mv -f .deps/rogue-room.Tpo .deps/rogue-room.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-save.o -MD -MP -MF .deps/rogue-save.Tpo -c -o rogue-save.o `test -f 'save.c' || echo './'`save.c
mv -f .deps/rogue-save.Tpo .deps/rogue-save.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-score.o -MD -MP -MF .deps/rogue-score.Tpo -c -o rogue-score.o `test -f 'score.c' || echo './'`score.c
mv -f .deps/rogue-score.Tpo .deps/rogue-score.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-spechit.o -MD -MP -MF .deps/rogue-spechit.Tpo -c -o rogue-spechit.o `test -f 'spechit.c' || echo './'`spechit.c
mv -f .deps/rogue-spechit.Tpo .deps/rogue-spechit.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-throw.o -MD -MP -MF .deps/rogue-throw.Tpo -c -o rogue-throw.o `test -f 'throw.c' || echo './'`throw.c
mv -f .deps/rogue-throw.Tpo .deps/rogue-throw.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-trap.o -MD -MP -MF .deps/rogue-trap.Tpo -c -o rogue-trap.o `test -f 'trap.c' || echo './'`trap.c
mv -f .deps/rogue-trap.Tpo .deps/rogue-trap.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-use.o -MD -MP -MF .deps/rogue-use.Tpo -c -o rogue-use.o `test -f 'use.c' || echo './'`use.c
mv -f .deps/rogue-use.Tpo .deps/rogue-use.Po
gcc -DHAVE_CONFIG_H -I. -I.. -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -MT rogue-zap.o -MD -MP -MF .deps/rogue-zap.Tpo -c -o rogue-zap.o `test -f 'zap.c' || echo './'`zap.c
mv -f .deps/rogue-zap.Tpo .deps/rogue-zap.Po
gcc -DJAPAN -DTOPSCO -g -O2 -w -Wno-return-type -lcurses -liconv -o rogue rogue-display.o rogue-hit.o rogue-init.o rogue-invent.o rogue-level.o rogue-machdep.o rogue-main.o rogue-message.o rogue-monster.o rogue-move.o rogue-object.o rogue-pack.o rogue-play.o rogue-random.o rogue-ring.o rogue-room.o rogue-save.o rogue-score.o rogue-spechit.o rogue-throw.o rogue-trap.o rogue-use.o rogue-zap.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-hit.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-hit.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-init.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-init.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-invent.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-invent.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-message.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-message.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-move.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-move.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-object.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-object.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-pack.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-pack.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-play.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-play.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-ring.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-ring.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-save.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-save.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-score.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-score.o
duplicate symbol '_utf8strlen' in:
rogue-display.o
rogue-zap.o
duplicate symbol '_utf8len' in:
rogue-display.o
rogue-zap.o
ld: 24 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [rogue] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2