^ Linux From Scratch - Version 12.1-systemd ^^^ ^ Chapter 8. Installing Basic System Software ^^^ |[[.:098-gcc-13.2.0|이전]] | [[.:08-installing_basic_system_software|위로]] / [[.:12.1|처음으로]] | [[.:100-sed-4.9|다음]]| |GCC-13.2.0 | Sed-4.9| ---- ===== 8.29. Ncurses-6.4-20230520 ===== Ncurses 패키지에는 터미널에 독립적인 문자 화면 처리를 위한 라이브러리가 포함되어 있습니다. * **빌드 시간:** 0.2 SBU * **디스크 공간:** 45MB ----- ==== 8.29.1. Ncurses 설치 ==== Ncurses 컴파일을 준비합니다. ./configure --prefix=/usr \ --mandir=/usr/share/man \ --with-shared \ --without-debug \ --without-normal \ --with-cxx-shared \ --enable-pc-files \ --enable-widec \ --with-pkg-config-libdir=/usr/lib/pkgconfig ---- === configure 옵션 설명 === * --with-shared \\ 공유 C 라이브러리를 빌드하고 설치합니다. * --without-normal \\ 정적 C 라이브러리를 빌드 및 설치하지 않습니다. * --without-debug \\ Ncurses가 디버그 라이브러리를 빌드 및 설치하지 않도록 합니다. * --with-cxx-shared \\ Ncurses가 공유 C++ 바인딩을 빌드 및 설치하도록 합니다. 또한 정적 C++ 바인딩을 빌드 및 설치하지 못하도록 합니다. * -enable-pc-files \\ pkg-config용 .pc 파일을 생성하고 설치합니다. * --enable-widec \\ 일반 라이브러리(예: libncursesw.so.6.4) 대신 와이드 문자 라이브러리(예: libncurses.so.6.4)를 빌드하도록 한다. 이러한 와이드 문자 라이브러리는 멀티바이트 및 기존 8비트 로캘에서 모두 사용할 수 있지만 일반 라이브러리는 8비트 로캘에서만 제대로 작동합니다. 와이드 문자 라이브러리와 일반 라이브러리는 소스 호환이 가능하지만 바이너리 호환은 불가능합니다. 패키지를 컴파일합니다. make 이 패키지에는 테스트 스위트가 있지만 패키지를 설치한 후에만 실행할 수 있습니다. 테스트는 ''test/'' 디렉터리에 있습니다. 자세한 내용은 해당 디렉터리에 있는 ''README'' 파일을 참조하세요. 이 패키지를 설치하면 ''libncursesw.so.6.4''를 덮어씁니다. 라이브러리 파일의 코드와 데이터를 사용하는 셸 프로세스가 충돌할 수 있습니다. ''DESTDIR''에 패키지를 설치하고 설치 명령을 사용하여 라이브러리 파일을 올바르게 바꿉니다(''curses.h'' 헤더도 [[.:042-ncurses-6.4-20230520|6.3절 "Ncurses-6.4-20230520"]]에서 수행한 것과 같이 와이드 문자 ABI가 사용되도록 편집됩니다). make DESTDIR=$PWD/dest install install -vm755 dest/usr/lib/libncursesw.so.6.4 /usr/lib rm -v dest/usr/lib/libncursesw.so.6.4 sed -e 's/^#if.*XOPEN.*$/#if 1/' \ -i dest/usr/include/curses.h cp -av dest/* / 많은 애플리케이션은 여전히 링커가 와이드 문자 라이브러리가 아닌 Ncurses 라이브러리를 찾을 수 있기를 기대합니다. 이러한 애플리케이션은 심볼릭 링크를 통해 와이드 문자 라이브러리와 연결하도록 속입니다(.so 링크는 항상 와이드 문자 ABI를 사용하도록 curses.h를 편집한 경우에만 안전합니다). for lib in ncurses from panel menu; do ln -sfv lib${lib}w.so /usr/lib/lib${lib}.so ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc done 마지막으로, 빌드 시점에 -lcurses를 찾는 이전 애플리케이션이 여전히 빌드 가능하도록 합니다. ln -sfv libncursesw.so /usr/lib/libcurses.so 원하는 경우 Ncurses 문서를 설치합니다. cp -v -R doc -T /usr/share/doc/ncurses-6.4-20230520 **참고** \\ 위의 지침은 소스에서 컴파일하여 설치한 패키지가 런타임에 링크되지 않으므로 와이드 문자가 아닌 Ncurses 라이브러리를 만들지 않습니다. 그러나 와이드 문자가 아닌 Ncurses 라이브러리에 대해 링크하는 알려진 유일한 바이너리 전용 애플리케이션은 버전 5가 필요합니다. 일부 바이너리 전용 애플리케이션 때문에 또는 LSB를 준수하기 위해 이러한 라이브러리가 반드시 필요한 경우 다음 명령을 사용하여 패키지를 다시 빌드하세요. make distclean ./configure --prefix=/usr \ --with-shared \ --without-normal \ --without-debug \ --without-cxx-binding \ --with-abi-version=5 make sources libs cp -av lib/lib*.so.5* /usr/lib ==== 8.29.2. Ncurses 패키지 구성 ==== * **설치된 프로그램:** * captoinfo (link to tic), clear, infocmp, infotocap (link to tic), ncursesw6-config, reset (link to tset), tabs, tic, toe, tput, and tset * **설치된 라입브러리:** * libcurses.so (symlink), libform.so (symlink), libformw.so, libmenu.so (symlink), libmenuw.so, libncurses.so (symlink), libncursesw.so, libncurses++w.so, libpanel.so (symlink), and libpanelw.so * **설치된 디렉토리:** * /usr/share/tabset, /usr/share/terminfo, and /usr/share/doc/ncurses-6.4-20230520 === 간략한 설명 === * **captoinfo** \\ termcap description을 terminfo description로 변환합니다. * **clear** \\ 가능한 경우 화면을 지웁니다. * **infocmp** \\ terminfo description을 비교하거나 출력합니다. * **infotocap** \\ terminfo description설명을 termcap description으로 변환합니다. * **ncursesw6-config** \\ ncurses에 대한 구성 정보를 제공합니다. * **reset** \\ 터미널을 기본값으로 초기화합니다. * **tabs** \\ 터미널에서 탭의 행동방식을 설정합니다. * **tic** \\ terminfo 파일을 소스 형식에서 ncurses 라이브러리 루틴에 필요한 바이너리 형식으로 변환하는 terminfo entry-decscription 컴파일러 [텀인포 파일에는 특정 터미널의 기능에 대한 정보가 포함되어 있습니다.] * **toe** \\ 사용 가능한 모든 터미널 유형을 나열하고 각 유형에 대한 기본 이름과 설명을 제공합니다. * **tput** \\ 터미널 종속 기능의 값을 셸에서 사용할 수 있게 합니다. 터미널을 재설정 또는 초기화하거나 긴 이름을 보고하는 데 사용할 수도 있습니다. * **tset** \\ 터미널을 초기화하는 데 사용할 수 있습니다 * libncursesw \\ 터미널 화면에 여러 가지 복잡한 방식으로 텍스트를 표시하는 함수를 포함합니다; 이 함수의 사용의 좋은 예는 커널의 make menuconfig 중에 표시되는 메뉴입니다. * libncurses++w \\ 이 패키지의 다른 라이브러리에 대한 C++ 바인딩을 포함합니다. * libformw \\ 폼을 구현하는 함수를 포함합니다 * libmenuw \\ 메뉴를 구현하는 함수를 포함합니다 * libpanelw \\ 패널을 구현하는 함수가 들어 있습니다.