이 글에서는 우분투 20.04에 bison 2.5 설치하는 법에 대해서 설명합니다.
우분투 20.04에 bison 2.5 설치하기
우분투 20.04에 bison 2.5 설치하기 위해서는 gnu에서 bison 소스를 다운받고 컴파일을 합니다.
아래와 같이 wget으로 다운 받고 컴파일 할 수 있습니다.
% wget http://ftp.gnu.org/gnu/bison/bison-2.5.tar.gz
--2023-09-14 13:49:47-- http://ftp.gnu.org/gnu/bison/bison-2.5.tar.gz
ftp.gnu.org (ftp.gnu.org) 해석 중... 209.51.188.20, 2001:470:142:3::b
다음으로 연결 중: ftp.gnu.org (ftp.gnu.org)|209.51.188.20|:80... 연결했습니다.
HTTP 요청을 보냈습니다. 응답 기다리는 중... 200 OK
길이: 2703110 (2.6M) [application/x-gzip]
저장 위치: ‘bison-2.5.tar.gz’
bison-2.5.tar.gz 100%[===============================================================================>] 2.58M 749KB/s / 3.5s
2023-09-14 13:49:51 (749 KB/s) - ‘bison-2.5.tar.gz’ 저장함 [2703110/2703110]
% ls
bison-2.5.tar.gz
% tar xvzf bison-2.5.tar.gz
% cd bison-2.5/
/home/altibase/pkg/bison-2.5
[altibase-KVM] altibase: ~/pkg/bison-2.5
% ls
ABOUT-NLS ChangeLog Makefile.am OChangeLog THANKS build-aux configure.ac doc lib po tests
AUTHORS GNUmakefile Makefile.in PACKAGING TODO cfg.mk data etc m4 runtime-po
COPYING INSTALL NEWS README aclocal.m4 configure djgpp examples maint.mk src
./configure --prefix=/usr/local/bin/bison-2.5/
make
make를 수행하면 아래의 두 개 에러가 발생합니다.
1. bison 2.5 컴파일 에러
make[3]: Entering directory '/home/altibase/pkg/bison-2.5/lib'
make[4]: Entering directory '/home/altibase/pkg/bison-2.5/lib'
depbase=`echo yyerror.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
gcc -I. -g -O2 -MT yyerror.o -MD -MP -MF $depbase.Tpo -c -o yyerror.o yyerror.c &&\
mv -f $depbase.Tpo $depbase.Po
In file included from yyerror.c:20:
./stdio.h:496:1: error: 'gets' undeclared here (not in a function); did you mean 'fgets'?
496 | _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
| ^~~~~~~~~~~~~~~
make[4]: *** [Makefile:1622: yyerror.o] Error 1
make[4]: Leaving directory '/home/altibase/pkg/bison-2.5/lib'
lib/stdio.h에 들어가서 496라인과 497 라인이 분리되어있어서 발생하는것으로 보이며, 라인을 합쳐줍니다.
/* It is very rare that the developer ever has full control of stdin,
so any use of gets warrants an unconditional warning. Assume it is
always declared, since it is required by C89. */
#undef gets _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); <-- 이렇게
2. fseterr.c 에러
fseterr.c: In function ‘fseterr’:
fseterr.c:72:3: error: #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."
72 | #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."
| ^~~~~
make[2]: *** [Makefile:1622: fseterr.o] 오류 1
_IO_ftrylockfile 옵션에 있는 것을 _IO_EOF_SEEN도 추가해 줍니다.
fseterr.c
@@ -29,7 +29,7 @@
/* Most systems provide FILE as a struct and the necessary bitmask in
<stdio.h>, because they need it for implementing getc() and putc() as
fast macros. */
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
+#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
fp->_flags |= _IO_ERR_SEEN;
#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */
컴파일이 완료되면 sudo make install을 해서 설치를 완료합니다.
export PATH=/usr/local/bin/bison-2.5/bin:$PATH
'리눅스&OS' 카테고리의 다른 글
우분투에서 VS CODE C/C++ JSON 구성하고 코드 분석하기 (0) | 2024.01.15 |
---|---|
우분투 20.04에서 notepad++ 설치하기 CLI (커맨드) (0) | 2024.01.15 |
우분투(Ubuntu 22.04)에 gcc/g++ 구버전 설치 - 9버전 gcc/g++ 설치하기 (0) | 2024.01.10 |
리눅스 커널 파라메터 운영중에 수정하는 법 - 레드햇 공식 내용(Configuring kernel parameters at runtime) (0) | 2024.01.09 |
리눅스 tcp 커널 파라메터 정리 (1) | 2024.01.05 |