저는 두 개의 공유 라이브러리를 구축하고 있으며, 한 라이브러리(
는 다른 라이브러리(A)에 의존하고 있으며, 둘 다 $ORIGIN/.의 rpath 구축되고 있으며, 실행 파일을 라이브러리 B에 연결합니다. 그래서 종속성은 다음과 같습니다:
실행 파일 C -> 라이브러리 B -> 라이브러리 A
우분투에서 A에 대한 B의 종속성은 를 사용하여 해결되는 반면, CentOS에서는 링커가 A를 찾을 수 없다고 경고하므로 실행 파일을 컴파일하는 동안 " 또는 rpath사용 시도"를 사용해야 합니다 .-rpath-rpath-link
다음은 문제를 재현하는 최소한의 예입니다.
mkdir testdir
echo 'void a() {}' > testdir/a.c
echo 'int a(); void b() { a(); }' > testdir/b.c
echo 'int b(); int main() { b(); }' > testdir/c.c
gcc testdir/a.c -shared -o testdir/liba.so -Wl,-rpath,'$ORIGIN/.' -fPIC
gcc testdir/b.c -Ltestdir -la -shared -o testdir/libb.so -Wl,-rpath,'$ORIGIN/.' -fPIC
gcc testdir/c.c -Ltestdir -lb -o testdir/a.out
이 문제를 일으키는 Ubuntu와 CentOS의 연결 동작 사이의 차이점은 무엇입니까? A 와 같은 것에 의존하지 않고 해결할 수 있도록 이것을 "고정"할 수 있는 방법이 있습니까 LD_LIBRARY_PATH?