라이브러리 (수정 됨)의 수정 된 버전과 연결을 시도하고 있습니다.잘못된 공유 라이브러리가 링크되고 있습니다.
소스를 다운로드하고 수정 한 다음 공유 객체 파일을 작성합니다.
그런 다음 공유 라이브러리 파일을 링크하려는 프로젝트의 ./lib
폴더에 복사했습니다. 다른 프로젝트는 수정 작업을 테스트하는 간단한 도구였습니다. 나는 또한 LAME의 ./include
에서 관련 머리글을 복사했습니다.
gcc -c src/harness.c -o obj/harness.o
gcc obj/harness.o -o bin/harness -L./lib/ -libmp3lame
을하지만 내 깜짝에게 :
$ ldd ./bin/harness
linux-vdso.so.1 => (0x00007fffbc5fe000)
libmp3lame.so.0 => /usr/lib/x86_64-linux-gnu/libmp3lame.so.0 (0x00007f10d9468000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f10d90a0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f10d8d9b000)
/lib64/ld-linux-x86-64.so.2 (0x00007f10d9713000)
합니다 (/usr/lib/...
라이브러리 대신 프로젝트 디렉토리 '하네스에 ./lib
에서 하나의 연결되었다
그런 다음 사용자 정의 된 libmp3lame.so의 이름을 libsomeothername.so로 변경하고 연결하려고했습니다. 동일한 문제가 발생했습니다. 내 사용자 정의 libmp3lame이 링크되었습니다.
여기에 무슨 일이 일어나고 있습니까? 왜 컴파일러는 말한대로하지 않습니까? 해당 이름을 사용하지 않을 때 /usr/lib/.../libmp3lame
이 연결된 이유는 무엇입니까 ?
gcc obj/harness.o -o bin/harness -L/home/manko/Repos/lamexperiment/lib/-lmp3lame -Wl, -rpath =/home/manko/Repos/lamexperiment/lib' 그리고 나서 'LD_LIBRARY_PATH =/home/manko/Repos/lamexperiment/lib ldd./bin/harness'는 여전히 작동하지 않습니다. 즉'libmp3lame.so.0 =>/usr/lib/x86_64-linux-gnu/libmp3lame을 얻습니다. so.0 (0x00007fc2d74df000) ' – jsj
예, 절대 경로로 처리하지 않습니다. –