/ usr / local / lib에서 공유 라이브러리 사용


58

소스에서 일부 라이브러리를 빌드했으며 그 이후의 파일 make install/usr/local/lib

예를 들어, 제 경우 libodb-2.2.so에는이 디렉토리에 있는 파일 이 있습니다.

그러나와 연결된 실행 파일을 시작하면 libodb공유 라이브러리를로드하는 동안 오류가 발생했습니다.libodb-2.2.so: cannont open shared object file: No such file or directory.

실행 파일을 올바르게 빌드하지 않았다는 의미입니까? 또는 폴더에 흥미로운 라이브러리가있을 수 있음을 시스템에 표시해야 /usr/local/lib합니까?

Ubuntu 12.04, Linux 커널 3.2.0-38-generic을 사용하고 있습니다.



디버거와 좋은 친구 관계를 맺는 것이 좋습니다
DDS

@DDS 좀 더 정교하게 제안합니다. 여기가 공동 작업 사이트라는 것을 알고 있습니다. 예를 들어 gdb어쨌든 link문제에 도움이되었던 방법 을 알려 주십시오 . 정말 궁금합니다. 처음에 당신의 말은 문제 와 관련이없는 것 같습니다 . 그러나 나는 틀릴 수 있습니다. 실제로 나는 충분히 몰라 gdb도서관의 로딩.
Stephane Rolland

죄송합니다 ...이 댓글은 U & L되었다 ... C 프로그래밍에 대한 학습자의 질문에 유래에 배치되어 있어야합니다 단지는 보지 않았다
DDS

@DDS C 프로그래밍을 배우거나 리눅스를 배우는 초보자? 좀 더 정확하게 부탁드립니다. 예를 들어 Windows에서 왔습니다. 그렇다고 C ++을 모른다는 것은 아닙니다. 판단력이 정확하지 않다고 생각하는 경향이 있습니다. SO에 있었더라도 곧 귀하의 행동이 중재자의 관심을 끌 것입니다. 알고 계십시오. 유용한 지식을 공유하는 열성적인 프로그래머로 구성된 COLLABORATIVE 사이트에 있습니다. 당신의 자아를 아첨하는 디자인은 없습니다. (내가 SO를 시작할 때 부드럽게 / 합리적으로 쫓겨났다는 것을 걱정하지 마십시오. 이것이 실제로 일어난 일이라고 생각합니다).
Stephane Rolland

답변:


58

현재 세션의 경우

내보내기 LD_LIBRARY_PATH = / lib : / usr / lib : / usr / local / lib

또는 영구적 인 변화를 만들기 위해 당신은 추가 할 수 있습니다 /usr/local/lib/etc/ld.so.conf(이 포함 또는 무언가) 실행 ldconfig루트로.

여전히 문제가있는 경우 running을 실행 ldd [executable name]하면 찾으려는 라이브러리와 찾을 수없는 라이브러리가 표시됩니다.


3
로부터 man페이지의 ldd(1)"보통의 경우, LDD는 표준 동적 링커 (참조 호출 ld.so(8)포함) LD_TRACE_LOADED_OBJECTS로 설정 환경 변수 1라이브러리 의존성을 표시하는 링커가 발생합니다.주의, 그러나, 일부 상황에서, 일부 버전 ldd5 월 . 직접 따라서, 당신이 사용해서는 안됩니다 프로그램을 실행하여 종속성 정보를 얻으려고 ldd신뢰할 수없는 실행 파일을 .이 임의의 코드 실행이 발생할 수 있으므로, 안전한 대안을 처리 할 때 신뢰할 수없는 실행 파일은 다음과 같습니다 ... "
SlySven

4
"... $ objdump -p /path/to/program | grep NEEDED"
SlySven

좋은 것-나는 전에 objdump를 본 적이 없다.
Flup

따라 글이 답변이 canonically입니다 잘못된유해 . 올바른 접근 방식의 사용 -L-rpath라이브러리에 대한 링크 검색 경로 및 런타임 검색 경로를 설정하는 컴파일시는 따라 올바른 방법 질문과 답변.
Cliff Armstrong

36

ldconfig라이브러리를 빌드 한 후 이미 실행 한 경우 계속 읽으십시오. 그렇지 않은 경우 먼저 ldconfig를 읽으십시오 .

/usr/local/libldconfig가 사용하는 라이브러리 경로에 없을 수 있습니다. 당신은 이것을 할 수 있습니다 :

ldconfig /usr/local/lib

그리고 링커 캐시에 내용을 추가해야하지만 경로를 올바르게 추가하는 것이 좋습니다. /etc/ld.so.conf.d디렉토리 가 있는지 확인하십시오 . 그렇다면 파일을 추가하고 ( "usr-local.conf"등) 파일을 한 줄에 넣으십시오.

/usr/local/lib

이제 실행하십시오 ldconfig. ld.so.conf.d 디렉토리가없는 경우 /etc/ld.so.conf 파일 이 있어야하며 해당 행을 끝에 추가 할 수 있습니다.


3
custom.conf 파일을 추가 한 /etc/ld.so.conf.d다음 ldconfig를 sudoed하여이를 고려하여 실행 파일을 지금 시작할 수 있습니다.
Stephane Rolland
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.