지정된 이름을 표시하지 않습니다공유 객체 라이브러리를 구축 : LDD 내가 데비안에서 공유 객체 라이브러리를 구축하기 위해 노력하고있어
cat /etc/issue
Debian GNU/Linux 9 \n \l
내가 (wrap.c
생성하는 래퍼 역할을 정상적으로 라이브러리와 객체를 구축 나는 다음 test.c
을 만들
gcc -c -fPIC -W -Wall -O2 -funroll-loops wrap.c
gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o
mv libtest.so /usr/local/lib/ && mv test-header.h /usr/local/include/
모든 오브젝트 파일) 라이브러리에 끌어 다음과 같이 성공적으로 컴파일합니다 :
gcc test.c -ltest
그러나, 다음과 같은 오류를 반환 ./a.out
프로그램 실행 :
./a.out: error while loading shared libraries: libtest.so: cannot open shared object file: No such file or directory
.so
를 검사를, 나는 참조 :
$ ldd /path/to/libtest.so
linux-vdso.so.1 (0x00007ffdb71c5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1c22fba000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1c23560000)
심지어 적어도 말할 것이다, libtest.so => none
표시되지 않습니다 나 도서관을 찾을 수 없어.
나는 여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다.
동일한 프로세스 (gcc -dynamiclib -o libtest.dylib *.o
)를 사용하여 을 macOS
에 성공적으로 만들고 성공적으로 실행 파일로 라이브러리를 호출 할 수 있습니다. 데비안에서는 어떤 점이 다른지 잘 모르겠습니다. /usr/local/lib
한 링커의 기본 검색 경로이기 때문에
링크 할 때 [-Wl, -rpath, /]로 [rpath] (https://en.wikipedia.org/wiki/Rpath)를 설정하는 것이 좋습니다. usr/local/lib' –
@Mikke Kinghan Doh ....! 저는 완전히 실행하기보다는 라이브러리에서 ldd를 사용하고 있다고 두려워했습니다. 웬일인지, 그것은 나를 완전히 버렸다. 통찰력을 고맙게 여기십시오! – floopy