/usr/lib/libstdc++.so.6 : 버전`GLIBCXX_3.4.15 '를 찾을 수 없음


135

우분투에서 GLIBCXX_3.4.15를 어떻게 얻을 수 있습니까? 컴파일중인 일부 프로그램을 실행할 수 없습니다.

내가 할 때 :

strings /usr/lib/libstdc++.so.6 | grep GLIBC

나는 얻다:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

도움을 주셔서 감사합니다!

답변:


81

소스에서 gcc 4.6을 컴파일하고 있으며 분명히

sudo make install 

이것을 잡지 않았다. 나는 파고 발견

gcc/trunk/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15

나는 그것을 / usr / lib에 복사하고 libstdc ++. so.6를 새로운 것을 가리 키도록 방향을 재 지정했다. 이제 모든 것이 작동한다.


1
나는 같은 문제가 있으며,이 게시물 / 답변은 내가 찾고있는 것입니다. 고마워요!
yoco

1
이것은 libstdc ++. so.6.0.16을 제외하고 gcc 4.6.2에서도 작동합니다. 감사!
Venesectrix

2
내 gcc 4.7 및 libstdc ++. so.6.0.17입니다. 이 솔루션으로 해결 된 동일한 문제가 있습니다. 명성.
Ricbit

1
그렇습니다. apt-get이 문제에 대한 기반 솔루션은 다음과 같습니다. superuser.com/questions/310809/…
aroth

4
@roosevelt : OS에 문제가 아니며 소프트웨어를 직접 설치 한 다음 링커를 올바르게 사용하지 않는 사용자에 문제가 있습니다. FAQ입니다 : gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths
Jonathan Wakely

54

실행 파일을 링크 할 때 libstdc ++를이 매개 변수와 정적으로 g ++로 전송하여 링크하여 과거 에이 문제를 피했습니다.

-static-libstdc++

라이브러리에서 정적으로 링크하는 것이 옵션 인 경우 아마도 가장 빠른 해결 방법 일 것입니다.


2
정말 고마워, 나는 SO에 제안 된 다른 모든 솔루션을 시도했지만 아무것도 효과가 없었다.
Itamar Katz

1
귀하의 솔루션에 감사드립니다, 그것은 많은 도움이됩니다!
Brightshine

문제는 라이브러리를 찾을 수없고 정적으로 링크하지 않아야한다는 것입니다. @Hobo의 답변을 참조하십시오.
Dan Mergens

45

clang이 작동하도록 노력하고 있었으며 (6.0.15도 필요함) 파고들 때에 설치되어 있음을 알았습니다 /usr/local/lib/libstdc++.so.6.0.15. 흑연 (실험적인 gcc 버전)을 설치할 때 설치되었습니다.

해당 위치의 라이브러리에 액세스해야하는 경우 다음 LD_LIBRARY_PATH과 같이 정의해야합니다 .

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64

이 작업을 수행 한 후 일을 할 수있었습니다. 그것이 누군가에게 도움이되기를 바랍니다.


나는 임베디드 대상에서 일하고 있었고 같은 문제가 발생했습니다. 귀하의 솔루션은 제 경우에는 작동하지 않는 것 같습니다. 실제로 대상의 대부분의 바이너리는 / lib의 기본 c 라이브러리를 사용하므로 변경 LD_LIBRARY_PATH하면 해당 라이브러리에 영향을줍니다. 그들은 바이너리의 가장 끝 부분에서 새로운 라이브러리에 대한 모든 링크가 작동하지 않는 것 같은 ls grep.... : I'am는 점점 :ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
Mouin

14

matlab eng을 사용하여 c 코드에서 m 함수를 호출하려고 할 때이 문제가 발생합니다. 명령으로 발생mex -f .. ..

내 해결책 :

strings /usr/lib/i386-<tab>/libstdc++.so.6 | grep GLIBC

3.4.15가 포함되어 있음을 발견했습니다.

그래서 내 시스템에는 최신 라이브러리가 있습니다.

문제는 matlab 자체에서 발생하며 자체 libstdc ++. so.6을 호출합니다. {MATLAB}/bin

업데이트 된 시스템 라이브러리로 바꾸십시오.


이것은 Xubuntu 13.04 x64의 Matlab 2013b x64에서도 작동합니다.
Marcin

고마워 난 단지에있는 파일의 새 심볼 링크를 만들어야했습니다 {MATLAB}/bin에있는 파일 /usr/lib/에 다음과 다시 시작 MATLAB. 이것은 Fedora 14 x64의 Matlab 2010b에서 작동합니다.
Wok

2

같은 오류가 발생했습니다. 이것이 나를 위해 일한 방법입니다.

  • 현재 설치된 gcc에서 프로젝트를 청소했습니다.
  • 그것을 다시 컴파일

완벽하게 일했습니다!


2

이 오류의 경우 다른 서버에서 최신 libstdc ++. so.6.0.17을 복사하고 소프트 링크를 제거한 후 다시 작성했습니다.

1. 다른 서버에서 libstdc ++. so.6.0.15 또는 최신 버전을 영향을받는 시스템으로 복사하십시오.
필자의 경우 SUSE linux 11 SP3은 최신 버전이었습니다.
2. rm libstdc ++. so.6
3. ln -s libstdc ++. so.6.0.17 libstdc ++. so.6 (/ usr / lib64 디렉토리 아래).

엔조이


2

방금 LLVM 3.7 버전을 빌드하는 비슷한 문제에 직면했습니다. 먼저 시스템에 필요한 라이브러리를 설치했는지 확인하십시오.

$locate libstdc++.so.6.*

그런 다음 찾은 위치를 $ LD_LIBRARY_PATH 환경 변수에 추가하십시오.


2
GLIBCXX_3.4.15를 지원하는 libstdc ++. so.6. * lib가있는 경우에만 작동합니다.
warunapww

2

때로는 대상 머신을 제어하지 않습니다 (예 : 라이브러리가 잠겨진 엔터프라이즈 시스템에서 실행되어야 함). 이 경우 GLIBCXX 버전에 해당하는 GCC 버전을 사용하여 코드를 다시 컴파일해야합니다. 이 경우 다음을 수행 할 수 있습니다.

  1. 대상 머신이 지원하는 최신 버전의 GLIBCXX를 찾으십시오. strings /usr/lib/libstdc++.so.6 | grep GLIBC... 버전이 3.4.19입니다.
  2. https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html 을 사용 하여 해당 GCC 버전을 찾으십시오. 우리의 경우 이것은입니다 [4.8.3, 4.9.0).

1

gcc 버전 4.8.1에서 오류는 다음과 같습니다.

/ root / bllvm / build / Release + Asserts / bin / llvm-tblgen : /usr/lib64/libstdc++.so.6 : 버전`GLIBCXX_3.4.15 '를 찾을 수 없음 (/ root / bllvm / build / Release + Asserts / bin / llvm-tblgen)

gcc 4.8.1을 준수한 곳에서 libstdc ++. so.6.0.18을 찾았습니다.

그런 다음 나는 이것을 좋아한다

cp ~/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64/

rm /usr/lib64/libstdc++.so.6

ln -s libstdc++.so.6.0.18 libstdc++.so.6

문제 해결됨.


1

RPM ( libstdc ++ 의 RPM)에서 추출한 다음 :

export LD_LIBRARY_PATH=.

시스템이 현재 디렉토리에서 라이브러리를 검색하도록 설정합니다. 그런 다음 방금 내 프로그램을 실행했습니다. 그러나 필자의 경우 필요한 단일 실행 파일을 받았지만 시스템 전체가 변경되지 않았습니다.


0

비슷한 문제 libstdc++가 있었고 컴파일하는 프로그램 에 정적으로 연결 하여 다음과 같이 해결했습니다 .

$ LIBS=-lstdc++ ./configure ... etc.

평소 대신

$ ./configure ... etc.

런타임에 공유 라이브러리를로드하는 것과 관련 하여이 솔루션에 문제가있을 수 있지만 주석을 달기에 충분히 문제를 조사하지 않았습니다.



0

사용자를 자신에서 다른 사람으로 변경했기 때문에 동일한 문제가 발생했습니다.

어떤 이유로 정상적인 컴파일을 한 후에는 실행할 수 없었습니다 (같은 오류 메시지). 다른 사용자 계정에 직접 ssh가 작동합니다.


이것은 실제로 질문에 대답하지 않습니다. 다른 질문이 있으면 질문하기를 클릭하여 질문 할 수 있습니다 . 현상금추가 하여이 질문에 더 많은 관심을 끌 수도 있습니다 .
ravron

나는 똑같은 문제가 있었기 때문에 그렇지 않습니다. 사용자 변경으로 인한 것입니다. 다른 사람에게도 일어 났을 수도있다.
HelloWorld

내 실수! 나는 당신이 문제가있는 것처럼 보이는 첫 번째 줄에 던져졌습니다. 계속하십시오!
ravron

또한 우분투를 사용하고 프로그램을 컴파일하려고 시도했지만 질문과 동일한 오류 메시지가 나타납니다. 내 오류는 su 명령을 사용하여 다른 사용자 계정에서하고 있다는 것입니다. 나는 이것이 문제의 이유와 방법을 다루기 때문에 질문에 대답한다고 생각합니다. 확실히 가능성이 있습니다.
HelloWorld

그리고 한 사용자가 LD_LIBRARY_PATH를 설정하여 최신 lib를 찾지 만 다른 사용자는 찾지 않습니까? 그것은이 질문의 특정 맥락에서 조금 벗어난 것 같습니다.
Marc Glisse

0

여러 버전의 gcc 컴파일러가 설치되어 있으며 기본 설치보다 최신 버전을 사용해야했습니다. Linux 시스템의 시스템 관리자가 아니기 때문에 / usr / lib 또는 위의 다른 여러 제안을 변경할 수 없습니다. 이 문제가 발생하여 결국 64 비트 라이브러리 (lib64) 디렉토리 대신 32 비트 라이브러리 디렉토리로 경로를 설정하도록 추적했습니다. 32 비트 디렉토리의 라이브러리가 호환되지 않았기 때문에 시스템의 기본값이 이전 버전입니다.

내가 참조했던 경로에 -L을 사용하면 "-lstdc ++를 검색 할 때 호환되지 않는 libstdc ++. so 건너 뛰기"에 대한 경고가 표시됩니다. 이것이 마침내 문제를 해결하는 데 도움이되는 힌트였습니다.


0

gcc 버전 4.8.1 (GCC)과 동일합니다 libstdc++.so.6.0.18. /usr/lib/x86_64-linux-gnu우분투 상자에 복사해야했습니다 .


0

필자의 경우 LD_LIBRARY_PATH는 / usr / local / lib64보다 먼저 / usr / lib64를 가졌습니다. (나는 llvm 3.9를 구축하고있었습니다).
llvm 3.9를 컴파일하기 위해 설치 한 새 gcc 컴파일러에는 / usr / local / lib64 아래에 최신 GLIBCXX 라이브러리를 사용하는 라이브러리가 있으므로 링커에서 LD_LIBRARY_PATH를 수정하여 / usr / local / lib64를 먼저 확인했습니다.
이 문제가 해결되었습니다.


0

방금 빌드하는 동안 -static-libstdc ++를 사용했습니다. 그것으로, 나는 a.out을 실행할 수 있습니다

g++ test.cpp -static-libstdc++

0

테스트 목적으로 :

원래 머신에서 라이브러리를 찾고 실행 파일과 동일한 디렉토리에 복사하십시오.

$ ldconfig -p | grep libstdc
        libstdc++.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
        libstdc++.so.6 (libc6) => /usr/lib32/libstdc++.so.6
$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 .

그런 다음 동일한 라이브러리를 대상 머신에 복사하고 실행 파일을 실행하십시오.

LD_LIBRARY_PATH=. ./myexecutable

참고 : 위의 명령은 일시적입니다. 시스템 전체의 변경은 아닙니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.