CentOS 5의 llvm 및 clang에 루트 권한이 없습니까?

CentOS 5의 llvm 및 clang에 루트 권한이 없습니까?

루트 권한 없이 centOS 5에서 llvm과 clang을 사용하려고 합니다. llvm 및 clang src 패키지를 다운로드하고 다음과 같이 일반적인 구성, make 및 make 설치 단계를 시도했습니다.

wget http://llvm.org/releases/3.3/llvm-3.3.src.tar.gz
wget http://llvm.org/releases/3.3/cfe-3.3.src.tar.gz
tar xzf llvm-3.3.src.tar.gz && cd llvm-3.3.src/tools/ && tar xzf ../../cfe-3.3.src.tar.gz

이전 버전은 작동하지 않았기 때문에 이 64비트 CentOS 시스템용으로 컴파일된 최신 버전의 gcc를 사용해 보았습니다(아래 참조). 새 버전을 사용하려고 하면 다음과 같은 메시지가 나타납니다.

export LD_LIBRARY_PATH=/home/avilella/src/gcc/gcc-4.7.2/lib64:/home/avilella/src/gcc/gcc-4.7.2/lib
export CC=/home/avilella/src/gcc/gcc-4.7.2/bin/gcc
export CXX=/home/avilella/src/gcc/gcc-4.7.2/bin/g++  
export PATH=/home/avilella/src/python/python-2.7.3/bin:$PATH
cd ~/src/llvm/latest/llvm-3.3.src
./configure --prefix=/home/avilella/src/llvm/latest/llvm && make clean && make -j8 && make install

다음 단계를 완료한 후에는 bin 디렉터리에 clang이 표시되지 않습니다.

/home/avilella/src/llvm/latest/llvm/bin    

그래서 clang 디렉토리의 지침을 따랐습니다 make -j8.

cd ~/src/llvm/latest/llvm-3.3.src/tools/cfe-3.3.src
make -j8

이렇게 하면 다음 clange/Config/config.h오류가 발생합니다.

[...]
InitHeaderSearch.cpp:17:51: fatal error: clang/Config/config.h: No such file or directory
[...]

이는 2011년 버그 보고서에서 언급되었으며 이제 해결되었습니다.

http://llvm.org/bugs/show_bug.cgi?id=11903

어떤 아이디어가 있나요?


이전 시도:

cd ~/src/llvm/latest/llvm-3.3.src
./configure --prefix=/home/avilella/src/llvm/latest/llvm && make clean && make -j8 && make install

checking for clang... clang
checking for C compiler default output file name... configure: error: C compiler cannot create executables
See `config.log' for more details.

부분 config.log:

configure:2047: checking for clang
configure:2063: found /home/avilella/bin/clang
configure:2074: result: clang
configure:2110: checking for C compiler version
configure:2117: clang --version >&5
clang: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by clang)
clang: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by clang)
clang: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by clang)
[...]

llvm 웹사이트에서 제공되는 fedora18 바이너리 버전을 사용해 보았지만 시스템에서 GLIBC 버전을 찾을 수 없다고 불평했습니다.

[~/src/llvm/clang+llvm-3.3-x86_64-fedora18/bin] $ ./clang
./clang: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by ./clang)
./clang: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./clang)

이 시스템에 최신 버전의 gcc가 설치되어 있지만 작동하려면 바이너리를 다운로드하거나 libc 버전을 다시 컴파일해야 할 것 같습니다. 문제는 방법입니다.

여기에서 rpm을 다운로드해 보았습니다.

http://pkgs.org/centos-5-rhel-5/centos-rhel-updates-x86_64/glibc-2.5-107.el5_9.5.x86_64.rpm/download/

rpm의 내용을 폴더에 넣었습니다.

rpm2cpio $rpm | cpio -idmv

lib64 폴더를 LD_LIBRARY_PATH 환경 변수에 추가했지만 문제가 해결되지 않았습니다(그리고 lscrash 와 같은 간단한 명령을 만들었습니다 less).

clang: /home/avilella/src/llvm/glibc/lib64/libc.so.6: version `GLIBC_2.15' not found (required by clang)
clang: /home/avilella/src/llvm/glibc/lib64/libc.so.6: version `GLIBC_2.14' not found (required by clang)

답변1

귀하가 수행한 단계의 수정된 버전에 따라 clang을 빌드할 수 있었습니다.

# Preliminary:
#  Get source
#  Extract source
#  Set environmental variables

cd /home/avilella/src/llvm/latest
# Clang is expected to be at `tools/clang`.
mv tools/cfe-3.3.src tools/clang
# You should clean before configuring, not after.
make clean
# The missing config.h file is created by the configure script
#  if clang is in the correct location 
./configure --prefix=/home/avilella/src/llvm/latest/llvm
make -j8
make install

답변2

일반적으로 말하면, 단순히 RPM의 압축을 풀고 그 내용을 사용해 보는 것은 좋은 생각이 아닙니다. 그 이유는 다음과 같습니다.

  1. 종속성을 해결해야 합니다.

  2. 올바른 작동을 위해 중요한 RPM 스크립트가 누락되었습니다.

  3. 올바른 작동에 중요할 수 있는 원래 디렉터리 구조가 손실됩니다.

숫자 2와 3은 실제로 거의 문제가 되지 않지만(RPM 패키지가 제대로 준비되지 않은 경우에만 발생함), 이 경우 문제가 첫 번째 문제입니다... glibc-common= 2.5-107.el5_9.5가 종속성인 것처럼 보입니다. 좋다...

그러나 어쨌든 당신이 선택한 이 접근 방식은 다소 불행합니다... 루트 액세스 권한 없이 서버에서 새 컴파일러를 사용해야 하는 경우 간단히 소스에서 컴파일하고 디렉터리의 아무 곳에나 설치할 수 있습니다. clang을 먼저 살펴보세요.시작하기페이지. 그리고 전화할 때 꼭 configure이용해 보세요 --prefix=/path_to/my_favorite_directory.

관련 정보