mieki256's diary



2024/01/31(水) [n年前の日記]

#2 [prog] smpegをMinGWでビルドできるか再挑戦してみたけど挫折した

Windows10 x64 22H2 + MinGW (gcc 6.3.0) で、SDL 1.x関連ライブラリをビルドできないものか試している。

先日は smpeg 0.4.4 のビルドに失敗して SDL_mixer もビルドできなかったけど。ググってたら、smpeg_0.4.5+cvs20030824.orig.tar.gz を入手できた。

_0.4.5+cvs20030824-8build1 : smpeg package : Ubuntu

smpeg 0.4.4 はビルドできなかったけど、0.4.5 ならビルドできるのではないか。試してみる。

smpeg 0.4.5のビルドに挑戦 :

msys.bat を実行して、その上で作業する。

tar zxvf smpeg_0.4.5+cvs20030824.orig.tar.gz
cd smpeg-0.4.5+cvs20030824.orig
./configure --prefix=/mingw --disable-opengl-player --enable-mmx --disable-gtk-player --disable-gtktest

続けて make を打つけれど、その前にいくつかのファイルを修正しないといけない。


_MinGW + SDL 環境の構築

生成された Makefile の147行目を修正。
LIBS =  -L/mingw/lib -lmingw32 -lSDLmain -lSDL -mwindows -lm
↓
LIBS =  -L/mingw/lib -lmingw32 -lSDLmain -lSDL -mwindows -lm -lstdc++


_smpegのコンパイル

MPEGaudio.h の最後に以下を追加。
void Play_MPEGaudioSDL(void *udata, Uint8 *stream, int len);
int Play_MPEGaudio(MPEGaudio *audio, Uint8 *stream, int len);
#ifdef THREADED_AUDIO
int Decode_MPEGaudio(void *udata);
#endif


audio/huffmantable.cpp を修正。

_Package: smpeg | Debian Sources

> diff -u huffmantable.cpp.orig huffmantable.cpp
--- huffmantable.cpp.orig       Thu Aug 26 13:37:52 1999
+++ huffmantable.cpp    Tue Jan 30 23:41:55 2024
@@ -9,6 +9,7 @@
 #include "config.h"
 #endif

+#include <climits>
 #include "MPEGaudio.h"

 static const unsigned int
@@ -550,11 +551,11 @@

 const HUFFMANCODETABLE MPEGaudio::ht[HTN]=
 {
-  { 0, 0-1, 0-1, 0,  0, htd33},
+  { 0, UINT_MAX, UINT_MAX, 0,  0, htd33},
   { 1, 2-1, 2-1, 0,  7,htd01},
   { 2, 3-1, 3-1, 0, 17,htd02},
   { 3, 3-1, 3-1, 0, 17,htd03},
-  { 4, 0-1, 0-1, 0,  0, htd33},
+  { 4, UINT_MAX, UINT_MAX, 0,  0, htd33},
   { 5, 4-1, 4-1, 0, 31,htd05},
   { 6, 4-1, 4-1, 0, 31,htd06},
   { 7, 6-1, 6-1, 0, 71,htd07},
@@ -564,7 +565,7 @@
   {11, 8-1, 8-1, 0,127,htd11},
   {12, 8-1, 8-1, 0,127,htd12},
   {13,16-1,16-1, 0,511,htd13},
-  {14, 0-1, 0-1, 0,  0, htd33},
+  {14, UINT_MAX, UINT_MAX, 0,  0, htd33},
   {15,16-1,16-1, 0,511,htd15},
   {16,16-1,16-1, 1,511,htd16},
   {17,16-1,16-1, 2,511,htd16},


ようやく make。
make

しかし、アセンブラソース、video/mmxflags_asm.S のところでエラーが出た。
$ make
Making all in audio
make[1]: Entering directory `/d/home/prg/c_lang/libs/sdl/build/smpeg-0.4.5+cvs20030824.orig/audio'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/d/home/prg/c_lang/libs/sdl/build/smpeg-0.4.5+cvs20030824.orig/audio'
Making all in video
make[1]: Entering directory `/d/home/prg/c_lang/libs/sdl/build/smpeg-0.4.5+cvs20030824.orig/video'
/bin/sh ../libtool --mode=compile gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"smpeg\" -DVERSION=\"0.4.5\" -Dsocklen_t=int  -I. -I.      -g -O2 -I/mingw/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main -DUSE_MMX -DTHREADED_AUDIO -DNDEBUG -I.. -DNOCONTROLS -I.. -I../audio -I../video -c mmxflags_asm.S
gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"smpeg\" -DVERSION=\"0.4.5\" -Dsocklen_t=int -I. -I. -g -O2 -I/mingw/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main -DUSE_MMX -DTHREADED_AUDIO -DNDEBUG -I.. -DNOCONTROLS -I.. -I../audio -I../video -c mmxflags_asm.S -o mmxflags_asm.o
mmxflags_asm.S: Assembler messages:
mmxflags_asm.S:6: Warning: .type pseudo-op used outside of .def/.endef ignored.
mmxflags_asm.S:6: Error: junk at end of line, first unrecognized character is `f'
mmxflags_asm.S:12: Warning: .type pseudo-op used outside of .def/.endef ignored.
mmxflags_asm.S:12: Error: junk at end of line, first unrecognized character is `c'
mmxflags_asm.S:57: Warning: .size pseudo-op used outside of .def/.endef ignored.
mmxflags_asm.S:57: Error: junk at end of line, first unrecognized character is `c'
make[1]: *** [mmxflags_asm.lo] Error 1
make[1]: Leaving directory `/d/home/prg/c_lang/libs/sdl/build/smpeg-0.4.5+cvs20030824.orig/video'
make: *** [all-recursive] Error 1

手詰まり。すんなり行かなかったな…。

再度 smpeg 0.4.4のビルドに挑戦 :

cd ..
tar zxvf smpeg-0.4.4.tar.gz
cd smpeg-0.4.4
./configure --prefix=/mingw --disable-opengl-player --disable-gtk-player --disable-gtktest

smpeg 0.4.5 の時と同じ修正作業をする。
  • Makefile を修正。
  • MPEGaudio.h を修正。
  • audio/huffmantable.cpp を修正。

make してみたけど、以前と同様にダメだった。大量にエラーが出る。
D:/MinGW/lib/libstdc++.a(new_op.o):new_op.cc:(.text+0x34): undefined reference to `_Unwind_SjLj_Register'
D:/MinGW/lib/libstdc++.a(new_op.o):new_op.cc:(.text+0x87): undefined reference to `_Unwind_SjLj_Unregister'
D:/MinGW/lib/libstdc++.a(new_op.o):new_op.cc:(.text+0xb7): undefined reference to `_Unwind_SjLj_Resume'
...
D:/MinGW/lib/libstdc++.a(eh_personality.o):eh_personality.cc:(.text+0x461): undefined reference to `_Unwind_SjLj_Register'
D:/MinGW/lib/libstdc++.a(eh_personality.o):eh_personality.cc:(.text+0x5d4): undefined reference to `_Unwind_SjLj_Unregister'
D:/MinGW/lib/libstdc++.a(eh_personality.o):eh_personality.cc:(.text+0x6c6): undefined reference to `_Unwind_SjLj_Unregister'

やはり MinGW (gcc 6.3.0) のバージョンが合ってないのだろうか?

以上です。

過去ログ表示

Prev - 2024/01 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project