공유 라이브러리 설치 - 질문 및 문제

공유 라이브러리 설치 - 질문 및 문제

온라인으로 다운로드한 공유 라이브러리를 "설치"하는 데 문제가 있습니다. 라이브러리 이름은 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

귀하의 경우에는 그렇게 해야 합니다.

관련 정보