QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1151|回复: 7

关于连接库的问题

[复制链接]
发表于 2006-5-3 17:48:08 | 显示全部楼层 |阅读模式
我创建了一个连接库,叫libclass.so,我在其他程序中想使用这个库,我的方法是:
g++ -s -shared -o main main.cpp -lclass -L.

共享库文件与main.cpp在同一个目录下,编译没有问题,但是运行的时候总是提示 error loading shared libraries: libclass.so connot open shared object file: no such file or directory
谢谢
发表于 2006-5-3 18:04:31 | 显示全部楼层
把libclass.so扔到/usr/lib下去,运行ldconfig

原理自己 man ldconfig吧
回复

使用道具 举报

 楼主| 发表于 2006-5-3 18:54:00 | 显示全部楼层
有没有其他的方法?
回复

使用道具 举报

 楼主| 发表于 2006-5-3 18:59:18 | 显示全部楼层
把他们放在其他的地方行不行?
回复

使用道具 举报

发表于 2006-5-4 00:01:11 | 显示全部楼层
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd` ./main
回复

使用道具 举报

 楼主| 发表于 2006-5-4 09:19:50 | 显示全部楼层
能否解释一下这句话的意思?
谢谢
回复

使用道具 举报

发表于 2006-5-4 10:28:24 | 显示全部楼层
gcc/g++在编译程式(非动态连接库)时不要用-shared

[code:1]
LD_LIBRARY_PATH    是系统寻找动态库的非缺省路径环境变量
``                             是运行shell程序并得到输出结果
pwd                          是取得当前路径
./main                       是执行main程序
[/code:1]
所以在shell下运行
[code:1]
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd` ./main
[/code:1]
理解起来是:
[code:1]
执行./main程序,如果它在系统缺省路径中找不到连接库的话则在当前目录下找。
[/code:1]

如果以后你想省麻烦的话把
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$你的目录
加到/etc/profile或/etc/bashrc或~/.bashrc就可以了

再有,也可以写shell脚本作为代替
例如,你把 libclass.so 放到 ~/mylib/ 下
想要执行连接了 libclass.so 的程序 ~/mybin/myapp
你可以创建内容象以下的shell脚本 ~/mybin/myapp.sh
[code:1]
# !/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/mylib ~/mybin/myapp $@
[/code:1]
然后chmod +x ~/mybin/myapp.sh
以后执行 ~/mybin/myapp.sh 即可
回复

使用道具 举报

 楼主| 发表于 2006-5-6 11:52:28 | 显示全部楼层
我的程序包含个目录分别是:a,b,c,lib,include
在a中,我定义几个类,这些类用到了目录b下定义的若干类对象,我把目录a下的类编译成了一个共享库文件,并把这个目录中用到的头文件和库文件分别放到include、lib目录下,我想在目录c中实用目录a中生成的共享库,但是编译的时候总是提示某些函数或变量没有定义,可是这些函数和变量都是在目录a或b中定义的。
这是什么原因?我在目录c中确实包含了应有的.h文件。
谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 16:27 , Processed in 0.048889 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表