ubuntu에서 MATLAB을 설치했는데 java 관련 오류가 발생

이거 은근 골때린다. MATLAB R2016A를 설치 다 하고나서 실행을 하는데 MATLAB이 죽는다. 근데 이때 실행 안되는 것에 대한 답변으로 Octave를 쓰라는 답변 다는 것들 진짜 열심히 패고 싶었다만…

다행이도, 매틀랩은 친절해서 그런지 크래시 덤프를 남겨준다. 그걸 열어보니 참으로 어이없는 상황이 만들어졌다.

스크린샷_2016-06-29_15-26-54.png

Segmentation violation

…설치 하자마자 바로 첫 실행한 프로그램이 저러는 것에는 이유가 있을 것이라 생각했다. 그래서 일단 사실 확인을 위해 내용을 뒤져보니..

Virtual Machine     : Java 1.7.0_60-b19 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode

…저기요? java 1.8 쓰고 있는지가 몇년인데..?

사실 매틀랩은 자바 환경에서 GUI를 제공한다. 그래서 최소한 java 1.4 이상을 지원해 줘야 하는데, 시스템이 잘 지원 안해줄까봐 스스로도 자바 런타임을 가지고 있다. 근데 그게 꼬인거다.

stack trace도 도중에 잘렸지만, 불려진 바이너리의 위치가 매틀랩 내부에 있는 자바 런타임 코드랑 현재 돌아가는 window 시스템이랑 꼬인 내용들이 대부분이다.

그래서 일단 지금 내 우분투에 설치되어 있는 java의 jre 경로로 위치를 변경해 줘야겠다 싶었다.

구동을 위해 필요한 것은 바로 위에 터미널에 경로에 있는 libjvm.so이다. 매틀랩은 저걸 못찾아서 Segmentation violation을 일으키는 것이었다.

나보다도 자바에 대해서 더 뛰고 날고 하는 사람들은 많겠지만… 저 파일에 대해서도 잠깐 적겠다.(내가 잊어버리지 않기 위해서) 저 파일은 Java Stored Procedure(자바 저장 프로시저)를 수행하기 위한 환경을 만들어주는 바이너리이다. 자바 개발자들 중에서 개발환경 설정할 때 경로 설정에 LD_LIBRARY_PATH를 설정해서 쓰는 분들 있는데 그 라이브러리에 들어있는 것이다. 경로는 운영체제, 아키텍쳐에 따라 다를 수 있지만 기본적으로는 [java home path]/jre/bin 경로에 있다.

그럼 저걸 어떻게 바꿔주느냐? 매틀랩 실행을 위한 경로로 들어가서 아래와 같이 MATLAB_JAVA 변수에 jre 경로를 입력하면 된다.

export MATLAB_JAVA=/usr/lib/jvm/java-8-oracle/jre

그리고 나서 실행을 하면 제대로 실행되는 것을 확인할 수 있다.

자바 기반의 GUI 환경에 익숙해지면 이런 것쯤이야 뭐 알아서 수정할 수 있겠지만… 난 그런 게 별로 없는 환경을 좋아해서 그런지 이거에 좀 삽질을 많이 했다.