빌드해야하는 프로그램이 있습니다. 프로그램은 libA
에 따라 다르며 libA
은 libB
에 따라 다릅니다. 두 라이브러리 모두 같은 폴더에 있지만 libB.so
이 포함되어 있지 않으므로 ldd libA.so
에 링크를 추가해야합니다.gcc 빌드 링크가 있지만 공유 라이브러리가 ldd에 표시되지 않습니다
이 내 gcc
명령입니다
gcc -L/path/to/libraries/lib -lA -lB -I/path/to/libraries/include main.cpp
프로그램 빌드 및 링크,하지만이 시작되지 않습니다. ldd
와
./a.out: symbol lookup error: /path/to/libraries/lib/libA.so: undefined symbol: symbol_used_in_libA_but_defined_in_libB
내가 libB.so
내 바이너리에 포함되지 않은 것을 볼 수 있습니다 :
/path/to/libraries
내부LD_LIBRARY_PATH
이다 : 나는 이러한 조건이
linux-vdso.so.1 => (0x00007fffaecd9000)
libA.so => /path/to/libraries/lib/libA.so (0x00007effc02a4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007effbfebb000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007effbfca5000)
/lib64/ld-linux-x86-64.so.2 (0x00007effc05cb000)
그것은 나에게 다음과 같은 오류를 제공합니다
ldconfig
을 실행하면 OK이고입니다.찾아 모두 libA.so
및-lB
-lBB
로 변경, 그래서 그것을 실행 내부를 연결하지 않는 경우에도 gcc
가 제대로 libB.so
을 찾을 수 있다고 생각한다면 libB.so
.내가 뭘 잘못하고있어? 실행 파일을 두 라이브러리 모두에 연결하려면 어떻게해야합니까?
이렇게하면 문제가 해결되었습니다. 내 것이 아니기 때문에 도서관을 재건 할 수는 없다. 어쨌든 내 동료 pc에서 같은 라이브러리를 사용하는 동일한 명령이 대신 작동하기 때문에 확인해야합니다. – Jepessen