c++动态库问题

C、C++和Java语言
回复
zzhcpp
帖子: 12
注册时间: 2006-04-25 9:00
送出感谢: 0
接收感谢: 0

c++动态库问题

#1

帖子 zzhcpp » 2007-04-14 22:01

c++ 源代码将头文件是实现文件分离,将实现文件编译成so文件,在windows上编译成dll文件,在windows上主程序和这个dll文件在一起,就可以顺利运行,在ubuntu上即使将主程序和.so文件放一起也提示找不到 so文件,怎么办?
在命令行下如何设置?
我不想修改系统配置,也不想将so文件放到/usr/lib目录下.
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

#2

帖子 eexpress » 2007-04-14 22:11

一般是进库的路径。系统结构是这样的
● 鸣学
zzhcpp
帖子: 12
注册时间: 2006-04-25 9:00
送出感谢: 0
接收感谢: 0

#3

帖子 zzhcpp » 2007-04-15 8:50

在命令行中运行,需要做那些工作呢?
调试一些程序的时候,我觉得这样做比较方便
头像
titainium
帖子: 689
注册时间: 2006-12-02 12:25
送出感谢: 0
接收感谢: 0

#4

帖子 titainium » 2007-04-15 9:54

ibm哪里有篇文章就是讲着个的,你去它的网站搜一搜就知道了。
Titainium
头像
titainium
帖子: 689
注册时间: 2006-12-02 12:25
送出感谢: 0
接收感谢: 0

#5

帖子 titainium » 2007-04-15 17:36

找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill
Titainium
头像
stlxv
论坛版主
帖子: 8273
注册时间: 2006-05-03 0:39
来自: المريخ
送出感谢: 0
接收感谢: 1 次

Re: c++动态库问题

#6

帖子 stlxv » 2007-04-16 0:57

zzhcpp 写了:c++ 源代码将头文件是实现文件分离,将实现文件编译成so文件,在windows上编译成dll文件,在windows上主程序和这个dll文件在一起,就可以顺利运行,在ubuntu上即使将主程序和.so文件放一起也提示找不到 so文件,怎么办?
在命令行下如何设置?
我不想修改系统配置,也不想将so文件放到/usr/lib目录下.

代码: 全选

export LD_LIBRARY_PATH=.
PHP是最好的语言!不服来战!
头像
stlxv
论坛版主
帖子: 8273
注册时间: 2006-05-03 0:39
来自: المريخ
送出感谢: 0
接收感谢: 1 次

#7

帖子 stlxv » 2007-04-16 0:58

titainium 写了:找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill
这样并没有解决问题,只是能成功链接而已

运行的时候照样找不到
PHP是最好的语言!不服来战!
VOD
帖子: 41
注册时间: 2007-02-09 12:54
送出感谢: 0
接收感谢: 0

#8

帖子 VOD » 2007-04-17 12:41

stlxv 写了:
titainium 写了:找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill
这样并没有解决问题,只是能成功链接而已

运行的时候照样找不到
的确啊,同你你的第一篇帖子……
ray82
帖子: 36
注册时间: 2007-02-28 16:19
来自: 上海
送出感谢: 0
接收感谢: 0

#9

帖子 ray82 » 2007-04-17 22:50

我把生成动态库copy到/usr/lib 编译,运行成功。
copy到/usr/local/lib 编译成功,运行却提示没所有such file.
ld --verbose 看到/usr/lib and /usr/local/lib都在search path下。
:?: :?: :?: :?: :?:
头像
feeling
帖子: 175
注册时间: 2006-04-29 20:10
来自: 北京·昌平
送出感谢: 0
接收感谢: 0
联系:

#10

帖子 feeling » 2007-04-22 19:24

1. 编译时需要用-L、-l参数;
2. 运行时需要设置LD_LIBRARY_PATH环境变量来使程序找到对应的库文件。
人生若只如初见,何事秋风悲画扇?
iceoolong
帖子: 34
注册时间: 2006-08-12 6:17
送出感谢: 0
接收感谢: 0

#11

帖子 iceoolong » 2007-05-04 22:53

更好的办法是添入/etc/ld.so.conf, 把需要的库路径添加进去,然后执行 /sbin/ldconfig
需要root权限的
头像
titainium
帖子: 689
注册时间: 2006-12-02 12:25
送出感谢: 0
接收感谢: 0

#12

帖子 titainium » 2007-05-05 13:43

stlxv 写了:
titainium 写了:找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill
这样并没有解决问题,只是能成功链接而已

运行的时候照样找不到
没有啊?可以正常运行。
Titainium
头像
feeling
帖子: 175
注册时间: 2006-04-29 20:10
来自: 北京·昌平
送出感谢: 0
接收感谢: 0
联系:

#13

帖子 feeling » 2007-05-08 13:45

titainium 写了:
stlxv 写了:
titainium 写了:找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill
这样并没有解决问题,只是能成功链接而已

运行的时候照样找不到
没有啊?可以正常运行。
我估计不会每次都会这么幸运di ^_^
还是按照标准的做法来得好,那样的话不容易出错。
人生若只如初见,何事秋风悲画扇?
头像
titainium
帖子: 689
注册时间: 2006-12-02 12:25
送出感谢: 0
接收感谢: 0

#14

帖子 titainium » 2007-05-09 11:54

不知道了,我编译的时候指定了so的路径。编译过后,只要保证路径正确,就可以运行。反倒是那种标准的做法,俺试了N次,没有成功过.........
Titainium
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26
送出感谢: 0
接收感谢: 1 次

#15

帖子 windwiny » 2007-05-09 12:01

sudo ldconfig
回复

回到 “C/C++/Java”