arm-linux-gnueabihf를 크로스 컴파일할 때 emacs ./configure에서 "tputs" 함수가 누락되었습니다.

arm-linux-gnueabihf를 크로스 컴파일할 때 emacs ./configure에서 "tputs" 함수가 누락되었습니다.

내 기본 장치에서 armv7l 시스템용 Arch 가상 머신을 통해 Emacs를 크로스 컴파일하려고 하는데 지금까지 ./configure 단계까지 아무런 문제도 없었습니다. 빌드, 호스트 및 대상 매개변수를 올바르게 설정했지만 다음 문제가 발생했습니다.

"필요한 함수 'tputs'는 어떤 라이브러리에서도 찾을 수 없습니다. 다음 라이브러리를 순서대로 시도했습니다: libtinfo, libncurses, libterminfo, libtermcap, libcurses 귀하의 시스템과 해당 시스템에 가장 적합한 라이브러리를 설치해 보십시오(예: libncurses -dev( el) 또는 유사한 패키지.

구글링을 좀 하다가 알게 된 사실

  1. Debian 및 Ubuntu에서 libcurses-dev는 시스템에 설치할 수 있는 별도의 개발 패키지입니다.
  2. 아치에서는 libcurses-dev의 내용이 ncurses 패키지에 포함되어 있어 별도로 사용할 수 없습니다.

나는 구성 파일이 "libcurses-dev" 패키지에 의해 생성된 리소스를 검색하고 있다고 생각하지만, Arch에 별도로 존재하지 않기 때문에 찾을 수 없습니다. 내가 찾은이 스레드어떤 사람이 자신의 코드를 컴파일하려고 시도하는 동안 이 질문을 했습니다. 해결책은 프로그램에 "ncurses.h"를 포함하는 것이었습니다. 저는 이것을 내 시스템의 "/usr/include/ncurses.h"에서 보았습니다. 구성 파일을 변경하거나 ./configure에 플래그로 추가하려면 어떻게 해야 합니까?

저는 일반적으로 Linux를 처음 접했고 끊임없이 배우고 있습니다. 따라서 여기서 분명히 잘못된 일을 하고 있다면 알려주시기 바랍니다! 다음은 컨텍스트를 위해 ./configure와 함께 사용하는 매개변수입니다.

    ./configure --build=x86_64-pc-linux-gnu
--host=arm-linux-gnueabihf --target=host=arm-linux-gnueabihf
--with-x-toolkit=no --with-xpm=no --with-jpeg=no --with-png=no
--with-gif=no --with-tiff=no  --without-xml2 --without-gnutls --without-x
--without-dbus

감사합니다!

답변1

Arch Linux는 ncurses에 대한 크로스 컴파일 패키지를 제공하지 않습니다(실제로는 모르겠습니다)어느ncurses 크로스 컴파일러 패키지이므로 이는 Arch의 특정 결함이 아닙니다.

검색 쿼리를 사용하여 어떤 패키지가 ncurses를 사용하거나 제공하는지 확인할 수 있습니다 pacman. 예를 들면 다음과 같습니다.

pacman -Ss ncurses

이렇게 하면 20개의 패키지가 표시되지만 첫 번째 패키지만 작동합니다.

core/ncurses 6.2-2 [installed]
    System V Release 4.0 curses emulation library

~에 따르면지침, 패키지가 있는 경우, 스키마 이름 접두사가 붙은 목록에 다음이 표시됩니다.

패키지 이름 앞에는 cross-라는 단어가 붙으면 안 됩니다(이는 이전에 제안되었지만 이름의 추가 길이로 인해 공식 패키지에는 채택되지 않았습니다). 공급업체 필드 또는 공급업체 필드에 "알 수 없음"이 있는 경우: arm-linux-gnueabihf-gcc. 더 짧은 명명 규칙(예: mips-gcc)이 있는 경우 이를 사용할 수 있지만 권장되지는 않습니다.

아치 리눅스저주패키지에는 헤더 파일(예: ncurses.h)과 같은 개발 파일이 포함되어 있습니다. 사용하는 모습을 볼 수 있습니다

pacman -Q -l ncurses |grep /include/

이것이 나에게 보여줍니다

ncurses /usr/include/
ncurses /usr/include/curses.h
ncurses /usr/include/cursesapp.h
ncurses /usr/include/cursesf.h
ncurses /usr/include/cursesm.h
ncurses /usr/include/cursesp.h
ncurses /usr/include/cursesw.h
ncurses /usr/include/cursslk.h
ncurses /usr/include/eti.h
ncurses /usr/include/etip.h
ncurses /usr/include/form.h
ncurses /usr/include/menu.h  
ncurses /usr/include/nc_tparm.h
ncurses /usr/include/ncurses.h
ncurses /usr/include/ncurses_dll.h
ncurses /usr/include/panel.h    
ncurses /usr/include/term.h
ncurses /usr/include/term_entry.h
ncurses /usr/include/termcap.h
ncurses /usr/include/tic.h
ncurses /usr/include/unctrl.h

그러나 헤더 파일이 생성됩니다(모든 구성에 대해 반드시 동일할 필요는 없음). 따라서 크로스 컴파일러 패키지는 핵심 ncurses 패키지와의 충돌을 피하기 위해 헤더 파일에 대해 다른 경로 이름을 사용합니다.

ncurses와의 크로스 컴파일을 지원하는 패키지가 없기 때문에 해결책은 구성 스크립트에서 예상하는 파일 명명 규칙을 사용하여 이러한 패키지를 개발하는 것 같습니다. Arch는 이에 대한 튜토리얼을 제공하지 않는 것 같지만논평이 주제에는 distcc 사용법을 배우는 것이 좋은 접근 방식이라는 힌트가 있습니다. 아치형의문서그렇게 시작되는 거야

면책 조항: 현재 수행 중인 작업이 확실하지 않은 경우 이 가이드는 모호하고 불완전할 것입니다. 이는 의도적인 것입니다. 이는 소프트웨어 컴파일 및 도구 체인 구성 요소를 처음 접하는 사용자를 위해 특별히 설계되지 않았습니다.

이는 Arch Linux ARM에서 사용하는 공식 크로스 컴파일 방법입니다. 많은 수의 패키지를 빌드하고 프로세스 속도를 높이려는 경우 다음 가이드에서는 x86 Linux 시스템을 ARM 크로스 컴파일러로 전환합니다. 또한 대부분의 크로스 컴파일 설정보다 훨씬 쉽습니다.

이 가이드에서는 x86에서 전체 ARM 개발 환경을 구축할 필요가 없도록 distcc를 사용합니다. distcc 프로젝트 웹사이트에 명시된 바와 같이, "distcc는 모든 시스템이 파일 시스템을 공유하거나, 시계를 동기화하거나, 동일한 라이브러리 또는 헤더를 설치할 것을 요구하지 않습니다." 이는 우리에게 필요한 것은 더 빠른 시스템에서 실행하는 것뿐이므로 특히 유리합니다. ARM용 크로스 컴파일러. 모든 최신 라이브러리와 헤더 파일을 사용하여 ARM 머신에서 빌드를 제어합니다.

관련 정보