나는 달리려고 노력하고있다.논리애플리케이션은 내 로직 분석기와 통신하고 드라이버 아래에 규칙을 설치한 후 다음 동작을 관찰했습니다.
./Logic
./Logic: cpp_libs/libc.so.6: version `GLIBC_2.18' not found (required by /usr/lib/x86_64-linux-gnu/libstdc++.so.6)
sudo bash
./Logic
./Logic: cpp_libs/libc.so.6: version `GLIBC_2.18' not found (required by /usr/lib/x86_64-linux-gnu/libstdc++.so.6)
sudo ./Logic
# Application runs
이 이상한 행동의 이유는 무엇입니까?
저는 우분투 14.04를 실행하고 있습니다.
답변1
동작의 차이에 대한 합리적인 설명은 작업 중인 명령과 작동하지 않는 명령이 라이브러리 검색 경로가 다르게 설정되어 있기 때문에 서로 다른 라이브러리를 로드한다는 것입니다 LD_LIBRARY_PATH
. 중요할 수 있지만 가능성이 낮은 다른 환경 변수가 있습니다 LD_PRELOAD
( 예 : 일부 실행 파일에 의존하는 스크립트이지만 오류 메시지가 이와 일치하지 않는 PATH
경우 )../Logic
Bash의 대화형 인스턴스에서 이 명령을 호출하는 것이 작동하지 않고 Works에서 직접 호출하는 이유에 대한 합리적인 설명은 Bash의 대화형 인스턴스가 실행되는 파일에서 이 환경을 설정 sudo
한다는 것입니다 . .bashrc
실행하면 sudo
거의 모든 환경 변수가 지워지므로 sudo ./Logic
작동하지만 실행 sudo bash
하면 해당 변수가 다시 설정되기 ./Logic
때문에 작동하지 않습니다 .bash
.profile
환경 변수는 (세션 시작 시 실행됨)에 설정 해야 합니다 ..bashrc
. 귀하의 증상은 환경 변수 변경 문제 중 하나의 특징입니다 .bashrc
.
LD_LIBRARY_PATH
설정 파일에 전혀 존재하지 않을 수 있는 설정입니다. 시스템 라이브러리를 숨기는 디렉터리를 추가하면 비호환성이 발생할 수 있습니다. 특정 프로그램을 실행하는 데 필요한 경우 LD_LIBRARY_PATH
해당 프로그램을 실행할 때만 설정하고(자동화하려는 경우 셸 래퍼를 통해) 전역적으로 설정하지 마세요.