CentOS 시스템용 Emacs의 최신 버전을 빌드하고 싶지만 빌드는 Debian 시스템에서 수행되어야 합니다 1git.sv.gnu.org
. 두 시스템 모두 x86_64 아키텍처에서 실행됩니다.
이전에 이 작업에 대한 지침을 본 적이 있지만 지금은 해당 지침이 필요하지만 찾을 수 없습니다(예: 아직 Google 검색에 적합한 키워드를 찾지 못했습니다).
원하는 지침을 찾을 수 없습니다.Emacs 설치 정보, 누구나. 다시 말하지만, 이는 잘못된 검색 전략 때문일 수도 있지만, 이 정보를 찾지 못한 이유는 그것이 단지 일반적인 Unix 지식(예: 타르볼 압축 풀기 또는 압축 풀린 콘텐츠의 소유권 변경)이기 때문일 수도 있다는 생각이 들었습니다. , Emacs에만 국한되지 않습니다. 그래서 여기에 질문을 올립니다.
요약하자면, 내 목표는 호스트 시스템에 라이브러리가 필요하지 않은 독립형 Emacs 실행 파일을 만드는 것입니다.
이를 달성하기 위해 Emacs를 컴파일하려면 어떤 설정을 사용해야 합니까? 좀 더 구체적으로 다음의 순서를 어떻게 변경해야 합니까?
./autogen.sh
./configure --prefix=${INSTALL_DIR} --with--m17n-flt
./make bootstrap
./make install
...이것을하기 위해?
그만한 가치가 있는 경우 "빌드"(Debian) 시스템 cc
에서는 /usr/bin/x86_64-linux-gnu-gcc-6
.
1 긴 이야기지만 기본적으로 Debian 시스템에서는 루트 액세스 권한이 있지만 CentOS 시스템에서는 루트 액세스 권한이 없습니다.
답변1
정적으로 링크된 바이너리는 -static
옵션을 링커에 전달하여 생성됩니다. 링커를 직접 실행하지 않으므로 빌드 시스템을 통해(그리고 아마도 컴파일러를 통해) 링커를 가져와야 합니다.
Emacs는 GNU 패키지이므로 아마도 autotools를 사용하여 구축되었을 것입니다. 이 경우 다음 변수를 사용해야 합니다 LDFLAGS
.
./configure LDFLAGS="-static"
불행하게도 이것을 시도한 후에 나는 emacs가 정적 바이너리에서 작동하지 않는 많은 glibc
함수 호출을 사용한다는 것을 발견했습니다. 이것의 일부로 구축된 "bootstrap-emacs"는 이로 인해 시작 시 segfault도 발생합니다. 따라서 정적 빌드에서는 이 작업을 수행할 수 없습니다.
대신 다음 중 하나를 수행할 수 있습니다.
- Debian 시스템에 CentOS chroot를 설정하고 빌드한 다음 바이너리를 CentOS chroot에 복사합니다.
대체 접두사를 사용하여 자동화된 툴킷을 구축하여 홈 디렉터리에서 실행할 수 있습니다.
./configure --prefix=$HOME/emacs --exec-prefix=$HOME/bin
그러면 Emacs가 아래에 설치되고
$HOME/bin
아래의 모든 지원 파일을 찾도록 컴파일됩니다$HOME/emacs
. 물론 이는 CentOS 시스템에서 필요한 라이브러리를 사용할 수 있다고 가정하지만 그렇지 않을 수도 있습니다.- 넌 그냥 할 수 있어묻다로컬 루트가 emacs를 설치합니다...