CentOS의 비표준 lib 디렉토리에 있는 ldconfig 관련 문제

CentOS의 비표준 lib 디렉토리에 있는 ldconfig 관련 문제

/usr저는 메인 드라이브( 등 포함 /usr/local) 에 저장 공간이 거의 없는 가상 머신(CentOS 5.3)으로 작업하고 있습니다 . 대부분의 저장 공간은 에 마운트된 별도의 드라이브에서 사용할 수 있습니다 /mnt. 그래서 이 드라이브에 기본 설치 디렉터리( bin, include, lib등의 하위 디렉터리 포함)를 만들고 거기에 라이브러리를 설치했습니다.

[standage@vm142-46 ~]$ ls -lhp /mnt/lib
total 33M
-rw-r--r-- 1 standage iplant-everyone 21M Dec 21 16:29 libgenometools.a
-rwxr-xr-x 1 standage iplant-everyone 13M Dec 21 16:29 libgenometools.so

그런 다음 제가 작성한 코드를 사용하여 라이브러리에 연결하려고 시도했지만 다음과 같은 메시지가 표시되었습니다.

/usr/bin/ld: cannot find -lgenometools

ldconfig내가 만든 새 설치 디렉터리를 업데이트하지 않았다는 것을 알고 이를 추가 /mnt/lib하고 /etc/ld.so.conf실행했습니다 /sbin/ldconfig. 그러나 코드를 다시 연결하려고 하면 동일한 오류가 발생했습니다.

결국 심볼릭 링크를 생성하여 라이브러리를 연결할 수 있었습니다 /usr/local/lib64...

[standage@vm142-46 ~]$ sudo ln -s /mnt/lib/libgenometools.a /usr/local/lib64
[standage@vm142-46 ~]$ sudo ln -s /mnt/lib/libgenometools.so /usr/local/lib64

...하지만 원래 문제가 실제로 해결되지는 않습니다. 단지 덕테이프 솔루션일 뿐입니다. 처음에는 무엇을 잘못했으며 설치된 라이브러리에 어떻게 연결합니까?

답변1

/etc/ld.so.conf런타임이 라이브러리를 찾는 동적 링커에만 영향을 미칩니다. 실행 파일을 빌드할 때 ld라이브러리 경로를 찾는 것이 중요합니다 . 이를 지정하는 일반적인 방법은 옵션을 전달하는 것입니다 -L. 대부분의 configure스크립트에는 -L추가 옵션을 전달하는 방법이 있습니다. 일반적으로 기본 검색 경로를 변경할 수 있는 방법은 없습니다 ld. gcc 사양 파일 변경을 고려할 수도 있지만 /usr여기에는 /etc.

설정이 약간 어색하다는 점을 고려하면 살펴보고 싶을 수도 있습니다.공동 설치위에. ​CentOS가 페더레이션 마운트 가능성을 제공하는지 여부는 /mnt/usr

답변2

ldconfig -vldconfig를 사용하여 새 라이브러리가 알려져 있는지 확인할 수 있습니다. 나는 그 메시지가 /usr/bin/ld: cannot find -lgenometools컴파일러의 연결 단계에 있는 척하고 있는 것입니다. 그렇지 않습니까? 그런 다음 링커에게 -L/mnt/lib인수를 사용하여 라이브러리를 찾을 수 있음을 알려주어야 합니다 .

관련 정보