試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

openBVEのバージョン0.9.6.0を試すが...

openBVEのバージョンが0.9.6.0となり、バージョン1.0の初めてのリリース候補ともなっている。

  1. ディレクトリ構成の変更
  2. シミュレータモードに入らない

ディレクトリ構成の変更

これまでのバージョンでは、配布ファイルの最上位ディレクトリにCompatibilityControlsなど、動作に必要な付属データの入ったディレクトリがあったのだが、これらは新しいDataというディレクトリに配置されることになった。また、設定ファイルは新しいSettingsというディレクトリに入ることになっている。
openBVEの実行方法とMandriva Linux向けRPMパッケージ(2009/1/14現在)」や「GNU/Linux上のopenBVEのサウンド出力と路線/車両データについて」の記述もそれに合わせて修正した。

シミュレータモードに入らない

(2009/3/23)この問題は対処法が見つかった。「openBVEがTao.Sdl.Sdl.SDL_MapRGB()で落ちる件のその後」を参照。
以下、以前の内容となる。
今回のバージョンで色々な変更があったのを試したかったのだが、非常に残念なことに、路線と車両のデータを選択した後のロードダイアログの後のシミュレータモードに入るところで確実にネイティブコード上のセグメンテーション違反が起こり処理が続行できない。
下は配布ファイルを展開し、設定のない状態から動かしている流れなのだが、それでもうまくいかない。ソースからビルドしたアセンブリを用いても結果は変わらなかった。
(2009/3/21)バージョン0.9.7.0(1.0rc2)においても同様に動作しなかった。

$ unzip [openbve_development.zipの場所]
$ mono OpenBve.exe
(路線と車両を選択し「スタート」を押し、ロード後のダイアログには「無視」を押す)
Stacktrace:

  at (wrapper managed-to-native) Tao.Sdl.Sdl.SDL_MapRGB (intptr,byte,byte,byte) <0x0007d>
  at (wrapper managed-to-native) Tao.Sdl.Sdl.SDL_MapRGB (intptr,byte,byte,byte) <0xffffffff>
  at OpenBve.Program.Start (string[]) <0x010bd>
  at OpenBve.Program.Main (string[]) <0x00164>
  at (wrapper runtime-invoke) OpenBve.Program.runtime_invoke_void_string[] (object,intptr,intptr,intptr) <0xffffffff>

Native stacktrace:

        mono [0x532491]
        mono [0x43d4fd]
        /lib64/libpthread.so.0 [0x7f0445be5d20]
        /usr/lib64/libSDL-1.2.so.0(SDL_MapRGB+0x5) [0x7f0443bafa75]
        [0x41c056cd]

Debug info from gdb:

(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
[Thread debugging using libthread_db enabled]
[New Thread 0x7f04468d9720 (LWP 6719)]
[New Thread 0x41be5950 (LWP 6721)]
[New Thread 0x414c3950 (LWP 6720)]
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
(no debugging symbols found)
0x00007f04454b1762 in select () from /lib64/libc.so.6
  3 Thread 0x414c3950 (LWP 6720)  0x00007f0445be5421 in nanosleep ()
   from /lib64/libpthread.so.0
  2 Thread 0x41be5950 (LWP 6721)  0x00007f0445be1f59 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
* 1 Thread 0x7f04468d9720 (LWP 6719)  0x00007f04454b1762 in select ()
   from /lib64/libc.so.6

Thread 3 (Thread 0x414c3950 (LWP 6720)):
#0  0x00007f0445be5421 in nanosleep () from /lib64/libpthread.so.0
#1  0x00000000004d6d02 in ?? ()
#2  0x00007f0445bde2a3 in start_thread () from /lib64/libpthread.so.0
#3  0x00007f04454b8f0d in clone () from /lib64/libc.so.6

Thread 2 (Thread 0x41be5950 (LWP 6721)):
#0  0x00007f0445be1f59 in pthread_cond_wait@@GLIBC_2.3.2 ()
   from /lib64/libpthread.so.0
#1  0x00000000004dc375 in ?? ()
#2  0x00000000004de57b in ?? ()
#3  0x00000000004e1d33 in ?? ()
#4  0x0000000000497e13 in ?? ()
#5  0x00000000004a2e7b in ?? ()
#6  0x00000000004d6373 in ?? ()
#7  0x00000000004ec53e in ?? ()
#8  0x00007f0445bde2a3 in start_thread () from /lib64/libpthread.so.0
#9  0x00007f04454b8f0d in clone () from /lib64/libc.so.6

Thread 1 (Thread 0x7f04468d9720 (LWP 6719)):
#0  0x00007f04454b1762 in select () from /lib64/libc.so.6
#1  0x00007f04460650ec in g_spawn_sync () from /usr/lib64/libglib-2.0.so.0
#2  0x00007f04460654c8 in g_spawn_command_line_sync ()
   from /usr/lib64/libglib-2.0.so.0
#3  0x0000000000532538 in ?? ()
#4  0x000000000043d4fd in ?? ()
#5  <signal handler called>
#6  0x00007f0443bafa75 in SDL_MapRGB () from /usr/lib64/libSDL-1.2.so.0
#7  0x0000000041c056cd in ?? ()
#8  0x00000000023cb4c0 in ?? ()
#9  0x0000000000000001 in ?? ()
#10 0x0000000000000140 in ?? ()
#11 0x00000000414e52d6 in ?? ()
#12 0x00000000000003c0 in ?? ()
#13 0x00007fff4e901830 in ?? ()
#14 0x00007fff4e901530 in ?? ()
#15 0x0000000000000258 in ?? ()
#16 0x0000000000000000 in ?? ()


=================================================================
Got a SIGSEGV while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries 
used by your application.
=================================================================

アボートしました

というわけで、このバージョンのMandriva Linux向けRPMパッケージの公開は解決策が見つからない限り見送ることに。*1
なお、Wine上では正常に動作している。

使用したバージョン:

  • openBVE 0.9.6.0
  • Tao Framework 2.1.0
  • Mono 1.9.1
  • SDL 1.2.13
  • Wine 1.1.16

*1:ディレクトリ構成の変更については対応できているので、上の件だけが問題