2016-08-02 2 views
0

/usr/lib에있는 새로운 버전의 GCC (4.3.9)를 컴파일하고 설치 한 Linux 상자가 있습니다.RPM을 설치할 때 libstdC++ (GLIBCXX _...)에 대한 의존성이 없습니다.

나는 내가 RPM에 번들로 제공 한 라이브러리의 집합을 구축하기 위해 컴파일러를 사용하지만, 내가 올 때 그것은 다음과 같은 오류를 제공하는 RPM을 설치하려고 :

rpm -ivh my-rpm.i586.rpm 
error: Failed dependencies: 
    libstdc++.so.6(GLIBCXX_3.4.10) is needed by my-rpm.i586 
    libstdc++.so.6(GLIBCXX_3.4.11) is needed by my-rpm.i586 
    libstdc++.so.6(GLIBCXX_3.4.15) is needed by my-rpm.i586 
    libstdc++.so.6(GLIBCXX_3.4.20) is needed by my-rpm.i586 
    libstdc++.so.6(GLIBCXX_3.4.9) is needed by my-rpm.i586 

나는이 기호는 것을 알고있다

strings /usr/lib/libstdc++.so.6 | grep GLIBCXX 
... 
GLIBCXX_3.4.10 
GLIBCXX_3.4.11 
... 
GLIBCXX_3.4.15 
... 
GLIBCXX_3.4.20 

그리고 나는 RPM으로 패키지 된 .so를 파일 중 하나에 LDD를한다면 나는 그것이 올바른 된 libstdc을 기대하고 있음을 알 수 ++ :

,762 컴파일 된 GCC의 I에 의해 제공됩니다

내 유일한 문제는 RPM의 종속성 해결 프로그램이 올바른 위치에 보이게하는 것입니다. This answer LD_LIBRARY_PATH는 검색 경로를 결정하지만 내 .bashrc에서이 설정은 도움이되지 않는 것 같습니다. (그리고 동일한 쉘에서 echo-set으로 설정되어있는 것을 볼 수 있습니다.

내 libstdC++의 위치를 ​​RPM 설치 프로그램에서 이해하려면 어떤 변수를 설정해야합니까?

+1

rpm은 경로에 설치된 RPM이 아닌 다른 RPM의 '제공'에서 종속성을 확인합니다. –

답변

2

문제는 rpm이 "메타 데이터"와 함께 작동한다는 것입니다. 공식 된 libstdC++ 6 패키지 제공 :

... 
libstdc++.so.6(GLIBCXX_3.4.10) 
libstdc++.so.6(GLIBCXX_3.4.11) 
... 

RPM은 GLIBCXX_3.4.10을 제공합니다 있는지 확인하기 위해 설치 /usr/lib/libstdc++.so.6 조사 시작되지 않습니다. Afaik에는 rpm에게 그렇게 할 수있는 방법이 없습니다. 이 문제를 해결하는 방법은 여러 가지가 있습니다. 내 우선 순위에 따라 :

  1. 이 된 libstdC++ 4.3.9 RPM을 직접를 다시 작성하고 설치; 모든 종속성은 잘 작동 할 것입니다 (gcc * src.rpm을 찾으려면 here을 볼 수 있습니다). 나를 위해. 이것이 유일한 미래 보장 솔루션입니다!
  2. 포장 할 때 my-rpm; 옵션 AutoReqProv: no을 사용하십시오. rpm에게 자신의 요구 사항을 자동으로 검사하지 말라고 명령하십시오. 물론 의존성 문제가 발생할 수도 있습니다. 의존성을 수동으로 결정하고 설치해야합니다.
  3. 내 rpm을 설치할 때; 종속성을 + 시하려면 옵션 --nodeps을 사용하십시오. 이로 인해 다른 종속성에 문제가 발생할 수 있습니다 (모두 종속성이 무시 됨).
+0

설명해 주셔서 감사합니다. 나는 제안 1 번을 시도한 후 – jam

+1

을 시작하면 정말 쉽다. src.rpm을 얻는다; 'rpmbuild --rebuild your.src.rpm'을 실행하고 결과 rpms를 설치하십시오 ... –

관련 문제