安装共享库 - 疑问和问题

安装共享库 - 疑问和问题

我在“安装”在线下载的共享库时遇到问题。库名称是运行时访问 (http://www.runtimeaccess.com/)。在快速入门指南中,他们解释了如何在编译时使用 -L 来使用库来定义库位置以及在添加库目录的路径后导出 LD_LIBRARY_PATH 环境变量。首先,为什么需要定义两次库位置?使用 -L 和 LD_Library_PATH 环境变量?

第二部分。我试图避免传递这些参数,也避免修改 LD_LIBRARY_PATH env,所以我所要做的就是像这样编译:

$ 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

应该在你的情况下这样做。

相关内容