我在“安装”在线下载的共享库时遇到问题。库名称是运行时访问 (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
应该在你的情况下这样做。