虎(牛)龍未酉2.1

記録帳|+n年後のジブンが思い出せますように……

【記録】rogueのインストールその2、rogue clone II

macOS上でrogue 5.4をやりたかったんだけど...

 

masatler.hatenablog.com

  

いまのところうまくコンパイルできないので

いったんRogue Clone IIをやってみることにする。

macOS上で、ソースコードからコンパイルしてrogueをやりたいんだなあ。

ターゲットは

Rogue 5.4(.5p/x)

Rogue Clone III(p)

Angband

なのだが、たしかに日本語版も捨てがたし。

 

 

github.com

 

コンパイルの仕方も書いてくれているので……。

こっちは上手くいくか?

 

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に入れ替える

 

$ brew install 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 

 

.bash_profileの追加部分をコメントアウト

#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