온라인으로 다운로드한 공유 라이브러리를 "설치"하는 데 문제가 있습니다. 라이브러리 이름은 Runtime Access(http://www.runtimeaccess.com/)입니다. 빠른 시작 가이드에서는 -L을 사용하여 컴파일할 때 라이브러리 위치를 정의하고 라이브러리 디렉터리에 경로를 추가한 후 LD_LIBRARY_PATH 환경 변수를 내보내는 방법을 설명합니다. 첫째, 왜 라이브러리 위치를 두 번 정의해야 합니까? LD_Library_PATH 환경 변수에 -L을 사용하시겠습니까?
두 번째 부분. 저는 이러한 매개변수 전달을 피하고 LD_LIBRARY_PATH 환경 수정도 피하려고 노력하고 있으므로 해야 할 일은 다음과 같이 컴파일하는 것뿐입니다.
$ gcc myapp.c -lrtadb
그래서 저는 이 라이브러리를 시스템 라이브러리의 일부로 포함시키고 싶습니다. 그래서 rta-0.8.1
전체 폴더를 여기에 복사 /usr/local/lib/rta-0.8.1
한 다음 /etc/ld.conf.d/rtadb.conf
라이브러리 디렉토리에 대한 경로가 포함된 파일을 추가했습니다 /usr/local/lib/rta-0.8.1/src
.
$ cat /etc/ld.so.conf.d/rtadb.conf
#rta (run time access) lib
/usr/local/lib/rta-0.8.1/src
sudo ldconfig
그런 다음 공유 라이브러리 목록을 업데이트 하려고 실행했지만 운이 없었습니다. 코드를 컴파일하려고 하면 라이브러리를 찾을 수 없습니다.
$gcc myappdb.c -lrtadb
/usr/bin/ld: cannot find -lrtadb
collect2: ld returned 1 exit status
내가 여기서 뭘 잘못하고 있는 걸까?
이것은 /usr/local/lib/rta-0.8.1/src에 있는 파일 목록입니다.
user@ubuntu:/usr/local/lib/rta-0.8.1/src$ ls -l
total 724
-rw-r--r-- 1 root root 24994 2012-11-14 10:49 api.c
-rw-r--r-- 1 root root 26132 2012-11-14 11:07 api.o
-rw-r--r-- 1 root root 62634 2012-11-14 10:49 do_sql.c
-rw-r--r-- 1 root root 5419 2012-11-14 10:49 do_sql.h
-rw-r--r-- 1 root root 41184 2012-11-14 11:07 do_sql.o
-rw-r--r-- 1 root root 149186 2012-11-14 11:07 librtadb.a
lrwxrwxrwx 1 root root 15 2012-11-14 11:07 librtadb.so -> librtadb.so.3.0
lrwxrwxrwx 1 root root 15 2012-11-14 11:07 librtadb.so.3 -> librtadb.so.3.0
-rwxr-xr-x 1 root root 117749 2012-11-14 11:07 librtadb.so.3.0
-rw-r--r-- 1 root root 2387 2012-11-14 10:49 Makefile
-rw-r--r-- 1 root root 10962 2012-11-14 11:07 parse.output
-rw-r--r-- 1 root root 21929 2012-11-14 11:07 parse.tab.c
-rw-r--r-- 1 root root 425 2012-11-14 11:07 parse.tab.h
-rw-r--r-- 1 root root 25064 2012-11-14 11:07 parse.tab.o
-rw-r--r-- 1 root root 6711 2012-11-14 10:49 parse.y
-rw-r--r-- 1 root root 46636 2012-11-14 10:49 rta.h
-rw-r--r-- 1 root root 31551 2012-11-14 10:49 rtatables.c
-rw-r--r-- 1 root root 17028 2012-11-14 11:07 rtatables.o
-rw-r--r-- 1 root root 58843 2012-11-14 11:07 token.c
-rw-r--r-- 1 root root 6291 2012-11-14 10:49 token.l
-rw-r--r-- 1 root root 37996 2012-11-14 11:07 token.o
그런데 저는 Ubuntu 10.04 LTS를 실행하고 있습니다.
감사해요.
편집: 이 정보에 익숙하지 않은 경우 아래 링크를 읽어보십시오. http://www.tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
답변1
ld
이 라이브러리는 기본 디렉터리 중 하나가 아니기 때문에 이 라이브러리를 찾을 위치를 알려주어야 합니다 . 링커는 에 의해 호출되므로 gcc
후자의 -L
옵션이 사용됩니다.
gcc -lrtadb -L/usr/local/lib/rta-0.8.1/src
귀하의 경우에는 그렇게 해야 합니다.