주희아빠의 헝그리 라이딩

ARM 환경에서 둠 실행하기. I 편 - 개요/ x86 시도. 본문

나름 IT 이야기

ARM 환경에서 둠 실행하기. I 편 - 개요/ x86 시도.

도림천 버섯돌이 2023. 11. 11. 17:24

2023.11.11

1. 개요

사건의 시작은 우연히 제 수중에 들어온 철지난 '라즈베리파이 3B' 때문이었습니다.


이것저것 해보면서 'arm 이 이렇게 다르구나...' 를 깨닫고 뭔가 재미 있는게 없을까 하다가... 아래의 블로그 글을 발견하였습니다.


https://m.blog.naver.com/anslasax/221637963425

 

임베디드 리눅스에서 둠 돌려보기 (Embedded Linux with Doom)

최근 하루하루가 너무 심심했다. 집에오면 씻고 아들 재우다가 자고 게임하다 자고, 책 몇글자 읽다가 자고...

blog.naver.com

 
외국에서는 화면만 있다면 온갖 장비에서 다 둠을 돌려 본다던데 아쉽게도 우리나라에서는 시도 자체나 성공/ 실패했다는 글을 거의 본적이 없습니다. 그나마 위 블로그에서나마 일부 과정과 돌아가는 모습에 대해 보여주고 있습니다.

'Doom' 자체가 유명하기도 하지만 개인적으로는 그 옛날 DOS 에서 하던 게임인 'Wolfenstein' 의 개선판인 'Wolfenstein 3D' 의 뒤를 잇는 게임이었기 때문에 좀 더 정이 가는 듯 합니다.

'울펜슈타인' 게임은 나치의 비밀문서를 탈취하고(1), 히틀러를 암살하는(2) 게임인데 독일 발음 그대로 '불펜슈타인' 이라고 읽기도 했습니다. 잠시 게임 스샷을 보면 '이게 어디를 봐서 같은 게임이냐?' 고 반문하겠지만.

하지만 독일군도 나오고 무기도 있고 상자도 나오고.. 문도 열리고... 3D 가 되면서 완전히 갈아 엎은 케이스. 

이제 좀 Doom 과 비슷해 보이나요? 울펜슈타인 3D. 이것이 둠의 조상! 존경스러운 '존 카맥 -John D. Carmack II'

 

다시 돌아와서. 저도 이 '다른 기종 둠 동작 시키기' 에 도전해 보기로 합니다.

둠의 정보는 다음 사이트에서 다루고 있으며 이중 가장 유명한 포트(다른 곳에서 돌아가도록 제작한 소스 종류)는 'Chocolate Domm' 과 'PrBoom' 이 있습니다. 각 링크는 아래 주소 참고.

https://doomwiki.org/wiki/Entryway

 

DoomWiki.org

The Doom Wiki is an extensive community effort to document everything related to id Software's masterpiece games Doom and Doom II, Doom 64, other games based on the Doom engine, Doom 3, Doom (2016), Doom Eternal, and more. We have created 21,588 articles t

doomwiki.org

 
https://www.chocolate-doom.org/wiki/index.php/Chocolate_Doom

 

Chocolate Doom

 

www.chocolate-doom.org

 
https://prboom.sourceforge.net/

 

Doom 은 종류가 많은데 그중 위 블로그에서 소개된 prboom 을 선택하였습니다. 일단은 그냥 따라하면 될 것으로 보고 시작하였습니다.

처음에는 블로그에 언급된 SDL 이나 buildroot 에 대해 이해하지 못하였으나 조금씩 진행하면서 정리가 되었습니다.

최종 목표는 위 블로그처럼 화면이 달린 임베디드나 제3의 장치가 목표지만 지금으로서는 주변에 마땅한 기기가 없어 ARM 을 채택한 비주류적인 장치를 물색중에 있습니다.

아직 최종 단계까지 성공한 것은 아니지만 그 과정을 준비해 가면서 몇가지 단계로 구분을 하였습니다. 
 

우선 첫번째는 x86 리눅스상에서 가장 기본적인 컴파일을 시도해 보는 것입니다.

이렇게 하면 컴파일 순서와 동작에 필요한 라이브러리들에 대한 감을 익힐 수 있습니다. 사실 이 단계 없이 바로 크로스 컴파일을 시작했었는데 과정중 발행하는 에러에 대해 판단 하기가 힘들었습니다. 그래서 일단 정상적으로 잘되는 경우를 정리해야 상황 판단과 에러 추적에 도움이 됩니다.

 

두번째로는 arm 으로 Cross Compile 을 시도해 볼 것입니다.

arm 머신인 '라즈베리파이 3B' 에서 시도해 봤는데 32bit 로는 컴파일이 제한적인 경우가 있었고, 64bit 여도 1GB 메모리에서는 'Out of memory' 를 내고 죽는 경우도 발생했습니다. 그리고 컴파일 속도도 너무 느려서 하루종일 걸리는 경우도 있었습니다.

이런 경우 x86 의 빠른 PC 에서 target host 의 아키텍처(arm)로 컴파일을 할 수 있습니다.

크로스 컴파일의 경우 필요한 재료들을 추가로 가지고 있어야 하는데 이들을 모두 직접 크로스 컴파일을 해서 준비할 수도 있고, Buildroot 라는 것을 통해 대체 시스템을 구축할 수도 있습니다.

 

마지막으로는 위 블로그의 그림처럼 프린터이든 집 벽에 달린 월패드이든.. ESP32 같은 임베디드 보드라든가 그외 뭔가 괴랄한 장비에서 둠을 돌리는 것이 최종 목표입니다.


 
일단 시작으로 x86 에서 기본을 수행해 봅니다.

 

2. x86 에서 컴파일 수행하기.

환경:  x86 이고 Ubuntu 22.04 LTS 에서 진행하였습니다.  사실은 Windows 10 에 있는 WSL2 환경입니다. 

Case 1: target host - x86, SDL 라이브러리 apt 로 설치.

-- 개발이 완전 처음이라면 컴파일 환경 구성.
$ sudo apt install build-essential

-- 다운 받고 압축을 풀어줍니다.
$ wget -O prboom-2.5.0.tar.gz https://sourceforge.net/projects/prboom/files/prboom%20stable/2.5.0/prboom-2.5.0.tar.gz/download
$ tar xvf prboom-2.5.0.tar.gz
$ cd prboom-2.5.0

-- 설치경로를 정해주고, opengl 과 network 옵션은 사용하지 않음으로 합니다. 우리는 최소의 동작확인만 하면 되니까요.
$ ./configure --prefix=$HOME/doom_prboom_x86 --disable-gl --without-net 

... 쭈욱 컨피그 환경을 구성하다가 다음처럼 에러가 발생합니다.

checking for SDL - version >= 1.1.3... no
*** The sdl-config script installed by SDL could not be found
*** If SDL was installed in PREFIX, make sure PREFIX/bin is in
*** your path, or set the SDL_CONFIG environment variable to the
*** full path to sdl-config.
configure: error: *** You must have the SDL libraries installed before you can compile prboom
 *** See http://prboom.sourceforge.net/linux.html

-> 컴파일시 사용될 SDL 라이브러리가 없다는 메세지입니다. 우선은 쉬운길을 갈 계획이므로 관련 라이브러리를 설치해 줍니다.

$ sudo apt install libsdl1.2-dev

-- 이후 다시 ./configure 를 진행하면 무사히 진행됩니다.

 

--이후 컴파일 명령을 내려봅니다.
$ make

.. 뭔가 막 컴파일되며 지나가다가 다음과 같은 에러를 만납니다.
다행히 위 블로그에 해결 방법이 나와 있습니다. 

i_sshot.c:234
png_error_ptr_NULL

-> 다음 소스를 열어서 위쪽 적당한 곳에 아래 내용을 넣어줍니다.
$ vi ./src/SDL/i_sshot.c
#ifndef png_error_ptr_NULL
#define png_error_ptr_NULL NULL
#endif

#ifndef png_infopp_NULL
#define png_infopp_NULL NULL
#endif
-- 다시 make 를 시도하면 성공합니다. 오예~
-- 설치를 위해 make install 해줍니다. 
$ make install

--설치 디렉토리로 가서 실행을 해봅니다. 이런..에러가 나네요.
$ cd ~/doom_prboom_x86/games

~/doom_prboom_x86/games$ ./prboom

prboom v2.5.0 (http://prboom.sourceforge.net/)
I_SetAffinityMask: manual affinity mask is 1
M_LoadDefaults: Load system defaults.
 default file: /home/multitab/.prboom/prboom.cfg
IdentifyVersion: IWAD not found

-- 우리가 컴파일한 것은 doom 실행파일이며 실제 동작을 위해서는 wad 라 부르는 재료파일이 추가로 필요합니다. 역시 다운 받아 줍니다.

-> doom1.wad 다운로드 후 실행
$ wget https://distro.ibiblio.org/slitaz/sources/packages/d/doom1.wad

~/doom_prboom_x86/games$ ./prboom

 

짜잔~. 드디어 둠 화면을 보게 되었습니다. 이상하게 제컴에서는 화살표까지는 먹는데 이후 진행이 안되네요. 하지만 이번엔 게임을 띄우는 것까지가 목표이니까.. 어쨌든 성공입니다.


 참고. 컴파일이 완료된 후 이동된 디렉토리와 파일 현황.

 

이번에는 과정을 약간 변경 해 봅시다.

Case 2: target host - x86, SDL 라이브러리 소스로 직접 설치.

-- 위에서 설치한 libsdl1.2-dev 와 함께 설치된 라이브러리들의 흔적을 지워줍니다.
$ sudo apt remove libsdl1.2-dev
$ sudo apt autoremove

-- 기존 컴파일된 흔적도 지우고 다시 세팅을 시작합니다. 
-- 구분을 위해 이번엔 설치 경로를 약간 다르게 주었습니다. 물론 똑같은 에러가 나겠지요.
$ make clean
$ ./configure --prefix=$HOME/doom_prboom_x86_sdl --disable-gl --without-net 

checking for SDL - version >= 1.1.3... no
*** The sdl-config script installed by SDL could not be found
*** If SDL was installed in PREFIX, make sure PREFIX/bin is in
*** your path, or set the SDL_CONFIG environment variable to the
*** full path to sdl-config.
configure: error: *** You must have the SDL libraries installed before you can compile prboom
 *** See http://prboom.sourceforge.net/linux.html
-- SDL 1.2 수동 컴파일 설치
-- 관련소스를 다운 받고 압축을 푼후 컴파일해 줍니다. 별 특이사항 없으면 다행이고 막히면 건바이건으로 해결해야 합니다.
$ git clone https://github.com/libsdl-org/SDL-1.2
$ cd SDL-1.2/
$ ./configure --prefix=$HOME/sdl/x86
$ make
$ make install


-- 저는 다행히 별 무리 없이 완료되었습니다. 멈췄던 configure 를 다시 시작 합니다.
-- case1 에서는 sdl 디렉토리를 자동으로 찾았었는데 이번에는 수동으로 명시를 해주어야 합니다.

$ ./configure --prefix=$HOME/doom_prboom_x86_sdl --disable-gl --without-net \
  --with-sdl-prefix=$HOME/sdl/x86 \
  --with-sdl-exec-prefix=$HOME/sdl/x86

$ make
$ make install

-- 오. 문제 없이 컴파일까지 되었군요. 필요한 경우 wad 파일 복사.
~/doom_prboom_x86_sdl/games$ cp ~/doom_prboom_x86/games/doom1.wad .


-- 신나서 실행해 봅니다. 그런데 웬걸. 아래와 같은 에러가 발행하였습니다.
$ ./prboom

prboom v2.5.0 (http://prboom.sourceforge.net/)
I_SetAffinityMask: manual affinity mask is 1
Could not initialize SDL [No available video device]

 

'Could not initialize SDL [No available video device]' 이 메세지로 구글을 엄청 검색하여도 사실 해결에 도움되는 답변은 없었습니다. 하지만 뭔가 libsdl1.2-dev 패키지를 apt 로 설치했을 때와는 다른게 있어서이겠지요.

이때부터 또 엄청난 삽질을 시작 합니다. 군에서나 회사에서나 '삽질'은 우리 전문 아니겠습니까?

다음은 sudo apt install libsdl1.2-dev 했을 때 나오는 메세지 중 일부입니다. 즉, 함께 설치되는 82개의 패키지중 일부가 실행시에도 필요하다는 얘기입니다.

The following NEW packages will be installed:
  alsa-topology-conf alsa-ucm-conf libasound2 libasound2-data libasound2-dev libasyncns0 libblkid-dev libcaca-dev
  libcaca0 libdrm-amdgpu1 libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libffi-dev libflac8 libgl-dev libgl1
  libgl1-amber-dri libgl1-mesa-dri libglapi-mesa libglib2.0-dev libglib2.0-dev-bin libglu1-mesa libglu1-mesa-dev
  libglvnd0 libglx-dev libglx-mesa0 libglx0 libllvm15 libmount-dev libogg0 libopengl0 libopus0 libpciaccess0 libpcre16-3
  libpcre2-16-0 libpcre2-32-0 libpcre2-dev libpcre2-posix3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpng-dev libpng-tools
  libpthread-stubs0-dev libpulse-dev libpulse-mainloop-glib0 libpulse0 libsdl1.2-dev libsdl1.2debian libselinux1-dev
  libsensors-config libsensors5 libsepol-dev libslang2-dev libsndfile1 libvorbis0a libvorbisenc2 libx11-dev libx11-xcb1
  libxau-dev libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-shm0 libxcb-sync1
  libxcb-xfixes0 libxcb1-dev libxdmcp-dev libxext-dev libxshmfence1 libxxf86vm1 pkg-config python3-distutils
  python3-lib2to3 uuid-dev x11proto-dev xorg-sgml-doctools xtrans-dev zlib1g-dev
0 upgraded, 82 newly installed, 0 to remove and 0 not upgraded.

 

이름만 봐서는 어떤 역할인지도 잘 모르겠고 하나를 지웠을 때 디펜던시 문제로 인해 함께 지워지는 경우도 있습니다. 위의 패키지를 '하나하나 수동으로 지워가면서, 필요에 따라 다시 설치했다가 & 컴파일 & 실행' 을 반복하여 결국 꼭 필요한 라이브러리를 추려냈습니다. 

libsdl1.2debian libasound2 libasound2-data libcaca0 libflac8 libpulse0 libopus0 libogg0 libsndfile1 libvorbis0a libvorbisenc2 libx11-xcb1

(원래 인터넷 짤방은 안쓰는데 이번건은 너무 삽질을 많이 해서)

 

그런데 이렇게 정리해 놓고 나중에 비교해 보니 libsdl1.2debian  패키지를 설치하면 함꼐 설치되는 디펜던시 패키지들과 거의 유사합니다(alsa-topology-conf alsa-ucm-conf 제외하고 동일). 이런 된장. 이게 다 위에서 정리를 했기 때문에 구분할 수 있다고 위안을...

libsdl1.2debian 설치시 함께 설치되는 패키지
  alsa-topology-conf alsa-ucm-conf libasound2 libasound2-data libcaca0 libflac8 libogg0 libopus0 libpulse0
  libsdl1.2debian libsndfile1 libvorbis0a libvorbisenc2 libx11-xcb1


-- libsdl1.2debian 패키지를 설치해주고 실행하면 구동이 됩니다.
$ sudo apt install libsdl1.2debian

$ ./prboom

 

재활용.

doom 을 동작시키려는 타겟이 다행히 debian 계열이라면 libsdl1.2debian  패키지를 설치하면 쉽게 해결이 가능하겠지만 그렇지 않은 경우에는 문제가 해결되지 않습니다. 

 

추가 고민.

이런 과정을 거치고 나니 실행 프로그램이 들어 있는 libsdl1.2debian 과 컴파일을 위한 헤더파일과 라이브러리가 들어 있는 ibsdl1.2-dev 이 어떻게 다른지 이해가 갔습니다. 그래서 컴파일시에는 -dev 패키지가 사용되고 실제 실행할 때는 libsdl1.2debian 만 있어도 됩니다.

$ dpkg -L libsdl1.2-dev
.. 일반 디렉토리. doc, man 은 제외..
/usr/bin/sdl-config
/usr/include/SDL/SDL.h
/usr/include/SDL/SDL_active.h
/usr/include/SDL/SDL_audio.h
/usr/include/SDL/SDL_byteorder.h
/usr/include/SDL/SDL_cdrom.h
/usr/include/SDL/SDL_config.h
/usr/include/SDL/SDL_cpuinfo.h
/usr/include/SDL/SDL_endian.h
/usr/include/SDL/SDL_error.h
/usr/include/SDL/SDL_events.h
/usr/include/SDL/SDL_getenv.h
/usr/include/SDL/SDL_joystick.h
/usr/include/SDL/SDL_keyboard.h
/usr/include/SDL/SDL_keysym.h
/usr/include/SDL/SDL_loadso.h
/usr/include/SDL/SDL_main.h
/usr/include/SDL/SDL_mouse.h
/usr/include/SDL/SDL_mutex.h
/usr/include/SDL/SDL_name.h
/usr/include/SDL/SDL_opengl.h
/usr/include/SDL/SDL_platform.h
/usr/include/SDL/SDL_quit.h
/usr/include/SDL/SDL_rwops.h
/usr/include/SDL/SDL_stdinc.h
/usr/include/SDL/SDL_syswm.h
/usr/include/SDL/SDL_thread.h
/usr/include/SDL/SDL_timer.h
/usr/include/SDL/SDL_types.h
/usr/include/SDL/SDL_version.h
/usr/include/SDL/SDL_video.h
/usr/include/SDL/begin_code.h
/usr/include/SDL/close_code.h
/usr/lib/x86_64-linux-gnu/libSDL.a
/usr/lib/x86_64-linux-gnu/libSDLmain.a
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/sdl.pc
/usr/share/aclocal/sdl.m4
/usr/lib/x86_64-linux-gnu/libSDL.so

$ dpkg -L libsdl1.2debian
.. 일반 디렉토리. doc, man 은 제외..
/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0.11.4
/usr/share/lintian/overrides/libsdl1.2debian
/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0

 

아직 이해가 안가는건 prboom 홈페이지에서는 ibsdl1.2 관련 이야기는 하고 있지만 그외 패키지들에 대해서는 필요 여부를 밝히지 않고 있습니다. 위 필수 패키기들중 libsdl1.2debian 만 실제로 필요하고 나머지들은 의존성 때문에 못 지우는 것이 아닌가 의심을 해보고 나머지 패키지들을 강제로 하나씩 지워 봅니다. apt 명령으로는 강제 삭제가 안되서 dpkg 명령으로 삭제를 진행했습니다.

 

기대를 하고 실행을 해봤는데 아쉽게도 관련 패키지를 지울 때 마다 그에 연결되는 라이브러리 에러가 발행했습니다.

--의존성이 걸린 패키지는 다음처럼 강제로 지울 수 있습니다.
$ sudo dpkg --purge --ignore-depends=libpulse0,libsdl1.2debian,libvorbisenc2,libsndfile1 libvorbisenc2

--이후 ./prboom 실행
libasound2: 
error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory

libasyncns0: 
error while loading shared libraries: libasyncns.so.0: cannot open shared object file: No such file or directory

libcaca0: 
error while loading shared libraries: libcaca.so.0: cannot open shared object file: No such file or directory

libflac8: 
error while loading shared libraries: libFLAC.so.8: cannot open shared object file: No such file or directory

libogg0: 
error while loading shared libraries: libogg.so.0: cannot open shared object file: No such file or directory

libpulse0: 
error while loading shared libraries: libpulse-simple.so.0: cannot open shared object file: No such file or directory

libsndfile1: 
error while loading shared libraries: libsndfile.so.1: cannot open shared object file: No such file or directory

libvorbis0a: 
error while loading shared libraries: libvorbis.so.0: cannwot open shared object file: No such file or directory

libvorbisenc2: 
error while loading shared libraries: libvorbisenc.so.2: cannot open shared object file: No such file or directory

 

ldd 명령을 통하면 의존성이 필요한 라이브러리들을 볼 수 있다고  합니다.

-- 수동으로 컴파일한 경우 필요로 포함된 라이브러리. 실행 불가 상태.
~/doom_prboom_x86_sdl/games$ ldd prboom
        linux-vdso.so.1 (0x00007ffea648f000)
        libSDL-1.2.so.0 => /home/multitab/sdl/x86/lib/libSDL-1.2.so.0 (0x00007f29a71c9000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f29a70dd000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f29a6eb5000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f29a73a3000)

-- apt 로 설치한 경우 사용되는 라이브러리. 실행 가능 상태.
~/doom_prboom_x86/games$ ldd prboom
        linux-vdso.so.1 (0x00007ffd1b0e9000)
        libSDL-1.2.so.0 => /lib/x86_64-linux-gnu/libSDL-1.2.so.0 (0x00007f99ba4e1000)
        libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f99ba4a6000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f99ba3bf000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f99ba197000)
        libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2 (0x00007f99ba094000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f99ba08f000)
        libpulse-simple.so.0 => /lib/x86_64-linux-gnu/libpulse-simple.so.0 (0x00007f99ba086000)
        libpulse.so.0 => /lib/x86_64-linux-gnu/libpulse.so.0 (0x00007f99ba031000)
        libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f99b9ef1000)
        libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007f99b9edc000)
        libcaca.so.0 => /lib/x86_64-linux-gnu/libcaca.so.0 (0x00007f99b9e10000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f99b9e0b000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f99b9ded000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f99ba6ea000)
        libpulsecommon-15.99.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so (0x00007f99b9d68000)
        libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f99b9d1a000)
        libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f99b9cf0000)
        libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007f99b99f9000)
        libncursesw.so.6 => /lib/x86_64-linux-gnu/libncursesw.so.6 (0x00007f99b99bb000)
        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f99b9989000)
        libsndfile.so.1 => /lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007f99b990a000)
        libX11-xcb.so.1 => /lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f99b9905000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f99b983e000)
        libasyncns.so.0 => /lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007f99b9836000)
        libapparmor.so.1 => /lib/x86_64-linux-gnu/libapparmor.so.1 (0x00007f99b981f000)
        libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f99b9819000)
        libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f99b9811000)
        libFLAC.so.8 => /lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007f99b97d5000)
        libvorbis.so.0 => /lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007f99b97a8000)
        libvorbisenc.so.2 => /lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007f99b96fb000)
        libopus.so.0 => /lib/x86_64-linux-gnu/libopus.so.0 (0x00007f99b969d000)
        libogg.so.0 => /lib/x86_64-linux-gnu/libogg.so.0 (0x00007f99b9692000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f99b9667000)
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f99b9598000)
        liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f99b9578000)
        libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f99b956b000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f99b942d000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f99b9415000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f99b93ef000)
        libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007f99b93e2000)

 

apt 로 설치한 경우 생각보다 상당히 많은 라이브러리를 필요로 하는군요. 정상적으로 실행을 하려면 위에 언급된 모든 라이브러리가 실행할 때 꼭 있어야 한다는 말이 되는데요.

컴파일된 실행파일과 필요시 SDL 관련 .so 정도만 포장을 해서 가져가면 될줄 알았는데 포장 대상이 너무 많아져 버렸습니다. 이게 맞는 것일까요? 어쨌든 다음 진도도 있으니 우선은 libsdl1.2debian 은 수동으로 설치하고 다음을 기약해 봅시다. 

반응형