비표준 디렉토리에서 autotools를 실행하는 방법은 무엇입니까?

비표준 디렉토리에서 autotools를 실행하는 방법은 무엇입니까?

원격 CI 서버에 라이브러리를 구축하려고 하는데 루트 권한이 없습니다. 라이브러리를 사용하려면 autoconf, automake 및 libtool 패키지가 설치되어 있어야 합니다. apt-get 설치로는 그렇게 할 수 없으므로 해결 방법을 시도했습니다. .deb 패키지를 다운로드하고 autoconf, libtoolize 등을 찾을 수 있도록 PATH를 내보내는 것입니다.

문제는 이러한 패키지의 바이너리에 하드 코딩된 추가 스크립트(패키지의 일부로 설치됨)에 대한 일부 경로가 있다는 것입니다. 이제 다음 오류가 발생합니다.

libtoolize: $pkgltdldir is not a directory: `/usr/share/libtool'

환경 변수를 사용하여 이 기본 경로를 변경하는 방법이 있습니까(여기서와 같은 방식으로)https://superuser.com/a/1144948/62460)?

내보내기를 시도했지만 $pkgltdldir작동하지 않았습니다.

답변1

쉘 스크립트 libtoolize(버전 2.4.2 및 2.4.6)에는 4개의 변수가 하드코딩되어 있습니다.

   datadir=/usr/share
   pkgdatadir=/usr/share/libtool
   pkgltdldir=/usr/share/libtool
   aclocaldir=/usr/share/aclocal

얼마 지나지 않아 다음 섹션이 있습니다.

# Allow the user to override the master libtoolize repository:
if test -n "$_lt_pkgdatadir"; then
    pkgltdldir="$_lt_pkgdatadir"
    pkgdatadir="$_lt_pkgdatadir/libltdl"
    aclocaldir="$_lt_pkgdatadir/libltdl/m4"

따라서 $_lt_pkgdatadir을 libtool 디렉토리로 설정하면 작동합니다(나에게는 작동하지만 aclocal 디렉토리가 m4라는 libltdl의 하위 디렉토리에 있는 경우에만 해당).

이를 감안할 때 귀하의 sed 솔루션은 매우 합리적인 것 같습니다.

답변2

여기서도 같은 문제가 발생했습니다.

루트가 아닌 사용자로 lighttpd-1.4.59 빌드

모바일$ ./autogen.sh

main::scan_file()이 너무 일찍 호출되어 /usr/bin/aclocal 라인 622에서 프로토타입을 확인할 수 없습니다. autom4te: autom4te.cache/requests를 열 수 없습니다:허가가 거부되었습니다aclocal: /usr/bin/autom4te가 종료 상태로 실패함: 1 autoreconf: aclocal이 종료 상태로 실패함: 1 빌드에는 autoconf automake libtool m4 pcre pcre-devel pkg-config가 필요함

루트 사용자로 lighttpd-1.4.59 빌드

루트# ./autogen.sh

main::scan_file()이 너무 일찍 호출되어 /usr/bin/aclocal 라인 622에서 프로토타입을 확인할 수 없습니다. libtoolize:$pkgltdldir은 디렉토리가 아닙니다: `/syslol/share/libtool'autoreconf: 종료 상태로 인해 libtoolize가 실패했습니다: 1 빌드에는 autoconf automake libtool m4 pcre pcre-devel pkg-config가 필요합니다.

그만큼./autogen.sh`를 찾으려고 시도합니다./syslol/share/libtool' 주어진 경로 디렉토리의 libtool 디렉토리.

따라서 디렉토리 트리 `를 생성하십시오./syslol/share/libtool' 다음과 같이

루트# mkdir -p /syslol/share/libtool

libtool 디렉토리를 찾자

루트# 찾기 / -type d -name libtool

/공유/libtool

`/share/libtool' 디렉토리를 참조하는 심볼릭 링크를 추가하세요.

루트# ln -s /share/libtool/* /syslol/share/libtool/

두 번째로 빌드를 실행하세요.

루트# ./autogen.sh

main::scan_file()이 너무 일찍 호출되어 /usr/bin/aclocal 라인 622에서 프로토타입을 확인할 수 없습니다. libtoolize: $aclocaldir은 디렉토리가 아닙니다. `/syslol/share/aclocal'autoreconf: 종료 상태로 인해 libtoolize가 실패했습니다: 1 빌드에는 autoconf automake libtool m4 pcre pcre-devel pkg-config가 필요합니다.

이는 aclocal 디렉터리도 이 경로에 연결해야 함을 나타냅니다.`/syslol/share/aclocal'

/syslol/share 디렉터리 내에 aclocal을 만듭니다.

루트 # mkdir -p /syslol/share/aclocal

aclocal 디렉토리의 위치를 ​​찾아보겠습니다.

루트# find / -type d -name aclocal

/공유/aclocal

/usr/local/share/aclocal

/usr/share/aclocal

선택하다/share/aclocal/연결 경로

루트 # ln -s /share/aclocal/* /syslol/share/aclocal/

세 번째 시험 실행:

root# ./autogen.sh

main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
`'libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /usr/bin/automake line 4153.
configure.ac:24: require Automake 1.13, but have 1.11.2
autoreconf: automake failed with exit status: 1
build requires autoconf automake libtool m4 pcre pcre-devel pkg-config

경로 문제를 해결했습니다., 그래도 아직은자동 생성 문제 ~해야 한다 업데이트 자동제작성공적인 빌드를 위해.

분산된 automake 버전 파일은 다음에서 찾을 수 있습니다.버전그리고 현재 내가 찾은 곳은오토메이크 버전 1.13

버전 automake 버전 1.11.2를 버전 1.13으로 교체해 보겠습니다.

원본 바이너리를 백업하세요.

자동으로 만들어지는 mobile$

/usr/bin/automake

루트 # mv /usr/bin/automake /usr/bin/automake1.11.2

버전 1.13의 내용으로 새로운 automake 구성 파일 생성

루트 # 고양이 > /usr/bin/automake

여기에 사이트의 콘텐츠를 붙여넣으세요.

^D

실행 권한 추가

루트 # chmod +x /usr/bin/automake

네 번째 편집

root # ./autogen.sh

main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
Now type './configure ...' and 'make' to compile.

우리는 성공적인 빌드를 했습니다

관련 정보