Segmentation fault (core dumped) 오류 관련 우분투

우분투 서버에서 Firefox나 Eclipse와 같이 GUI 환경에서 돌아가는 프로그램을 실행할 때

Segmentation fault (core dumped)가 뜰 때가 있다. (안 뜰 수도 있고, 나도 이런 오류는 우분투 쓴 지 6년만에 처음 봤다 ㅜ.ㅠ )

원인을 알기 위해서는

$ strace eclipse

와 같이 입력해주면 아래와 같이 무슨 일이 진행되는 지 소상히 알려준다.

(생략)
poll([{fd=3, events=POLLIN}], 1, -1)    = 1 ([{fd=3, revents=POLLIN}])
recvmsg(3, {msg_name(0)=NULL, msg_iov(1)=[{"\1X>\0005\0\0\0>\351\21\1\324\0\0\0\23.:\0016\"(\1\20.\264\0\0\0\0\0"..., 4096}], msg_controllen=0, msg_flags=0}, 0) = 244
recvmsg(3, 0x7ffd84f67400, 0)           = -1 EAGAIN (Resource temporarily unavailable)
recvmsg(3, 0x7ffd84f67400, 0)           = -1 EAGAIN (Resource temporarily unavailable)
open("tls/x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("tls/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("x86_64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/cuda/lib64/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=118491, ...}) = 0
mmap(NULL, 118491, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7fb377f52000
close(4)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libGLX_indirect.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
munmap(0x7fb377f52000, 118491)          = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault (core dumped)

위 메시지의 하단부를 보면,

libGLX_indirect.so.0 파일이 없음을 지적하고 있음을 알 수 있다.

실제로 libGLX_indirect.so.0 파일이 있는지 검색해 보면, /usr/lib/x86_64-linux-gnu/ 에는 libGLX_indriect.so.0이 없다.

대신, 아래와 같이 입력해 보면,

$ sudo find / -iname 'libGLX_indirect.so.0'

/usr/lib/nvidia-367/libGLX_indirect.so.0
/usr/lib32/nvidia-367/libGLX_indirect.so.0

와 같이 파일이 존재함을 알 수 있다.

그래서,

$ cd /usr/lib/x86_64-linux-gnu/
$ sudo ln -s /usr/lib/nvidia-367/libGLX_indirect.so.0

를 통해, soft link를 만들어 준다.

그러면 문제 해결!!!

Firefox와 eclipse가 정상적으로 구동됨을 알 수 있다. 다행이다 ㅜ.ㅠ

물론 segmentation fault (core dumped) 문제는 다양한 원인으로 인해 발생할 수 있기 때문에, 위의 해결책이 만능키가 되진 않는다.
따라서, 오류의 구체적인 원인이 무엇인지 아는 것이 중요하며, 다양한 삽질을 통해 해결해야 한다.



덧글

댓글 입력 영역