본문 바로가기

Linux/Android

libmpfr.so.1 컴파일 에러 없애기

출처 : http://forum.falinux.com/zbxe/?document_srl=522695

최근에 (주)FALINUX에서 S3C6410 제품을 내 놓았습니다. S3C6410 보드에서 사용하는 크로스 컴파일러를 오늘에야 알게 되었는데, 이름이 좀 깁니다. arm-generic-linux-gnueabi-gcc 길죠? 문제는 이 크로스 컴파일러를 설치하고 컴파일을 하면 에러가 발생합니다.

]$ arm-generic-linux-gnueabi-gcc test.c
/usr/libexec/gcc/arm-generic-linux-gnueabi/4.3.2/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory ]$

아니 이게 무슨 말이레? 지금껏 ARM보드와 MIPS 보드를 위한 크로스 컴파일러를 사용해 보았지만 처음 보는 에러입니다. 메시지를 보면 mpfr 라이브러리가 없다는 얘기인데, mpfr? 이게 무슨 라이브러리인가? 검색해 보니 multiple-precision floating-point 라이브러리랍니다. 자세한 설명은 영어라서 읽기를 포기하고 빨리 설치해서 컴파일 에러를 피하고 싶었습니다.

 

그런데, mpfr 만 설치하면 안 되네요. 그전에 gmp를 먼저 설치해야 합니다. gmp는 또 뭐래? 으~

gmp 라이브러리 설치

gmp는 아래의 사이트에서 내려 받을 수 있습니다.

여러 버전이 나오는데, 이글을 쓰는 최근 버전은 4.3.1입니다. 파일을 적당한 곳에 내려 받아 아래의 순서에 따랄 설치합니다.

]# tar zxvf gmp-4.3.1.tar.gz
]# cd gmp-4.3.1
]# ./configure 
]# make 
]# make check
]# make install

mpfr 설치

mpfr은 아래의 사이트에서 구할 수 있습니다.

이글을 작성하는 중의 최근 버전은 2.4.1입니다. 적당한 곳에 내려 받아 아래의 순서에 따라 설치합니다.

]# tar zxvf mpfr-2.4.1.tar.gz
]# cd mpfr-2.4.1
]# ./configure 
]# make 
]# make check
]# make install

컴파일 결과물을 /usr/lib로 이동

gmp와 mpfr 라이브러리 설치는 매우 간단합니다. 그러나 이렇게 설치하고 다시 컴파일해 보면 똑같은 "libmpfr.so.1: cannot open shared object file" 에러가 발생합니다. 한참 고생하다가 알게되었는데, 위의 방법대로 설치를 하면 mpfr 라이브러리 설치 위치가 /usr/local/lib/ 안에 설치됩니다.

]# find / -name libmpfr.so.1 -print
/usr/local/lib/libmpfr.so.1
]# 

libmpr 로 시작하는 라이브러리 파일이 /usr/local/lib에 있으면 안 되고, /usr/lib에 있어야 컴파일이 되더군요. 그래서 컴파일해서 얻어진 결과물을 /usr/lib로 이동 시킵니다.

]# mv -f /usr/local/lib/libgmp* /usr/lib
]# mv -f /usr/local/lib/libmpfr* /usr/lib

컴파일 다시 해 보기

arm-generic-linux-gnueabi-gcc 컴파일러를 이용하여 컴파일 해보십시오. 에러 없이 컴파일이 됩니다. 휴~