当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 15 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : c++动态库问题
帖子发表于 : 2007-04-14 22:01 

注册: 2006-04-25 9:00
帖子: 12
送出感谢: 0 次
接收感谢: 0 次
c++ 源代码将头文件是实现文件分离,将实现文件编译成so文件,在windows上编译成dll文件,在windows上主程序和这个dll文件在一起,就可以顺利运行,在ubuntu上即使将主程序和.so文件放一起也提示找不到 so文件,怎么办?
在命令行下如何设置?
我不想修改系统配置,也不想将so文件放到/usr/lib目录下.


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-04-14 22:11 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
一般是进库的路径。系统结构是这样的


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-04-15 8:50 

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


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-04-15 9:54 
头像

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


_________________
Titainium


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-04-15 17:36 
头像

注册: 2006-12-02 12:25
帖子: 689
送出感谢: 0 次
接收感谢: 0 次
找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill


_________________
Titainium


页首
 用户资料  
 
6 楼 
 文章标题 : Re: c++动态库问题
帖子发表于 : 2007-04-16 0:57 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
zzhcpp 写道:
c++ 源代码将头文件是实现文件分离,将实现文件编译成so文件,在windows上编译成dll文件,在windows上主程序和这个dll文件在一起,就可以顺利运行,在ubuntu上即使将主程序和.so文件放一起也提示找不到 so文件,怎么办?
在命令行下如何设置?
我不想修改系统配置,也不想将so文件放到/usr/lib目录下.


代码:
export LD_LIBRARY_PATH=.


_________________
PHP是最好的语言!不服来战!


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-04-16 0:58 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
titainium 写道:
找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill


这样并没有解决问题,只是能成功链接而已

运行的时候照样找不到


_________________
PHP是最好的语言!不服来战!


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-04-17 12:41 

注册: 2007-02-09 12:54
帖子: 41
送出感谢: 0 次
接收感谢: 0 次
stlxv 写道:
titainium 写道:
找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill


这样并没有解决问题,只是能成功链接而已

运行的时候照样找不到

的确啊,同你你的第一篇帖子……


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-04-17 22:50 

注册: 2007-02-28 16:19
帖子: 36
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
我把生成动态库copy到/usr/lib 编译,运行成功。
copy到/usr/local/lib 编译成功,运行却提示没所有such file.
ld --verbose 看到/usr/lib and /usr/local/lib都在search path下。
:?: :?: :?: :?: :?:


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-04-22 19:24 
头像

注册: 2006-04-29 20:10
帖子: 175
地址: 北京·昌平
送出感谢: 0 次
接收感谢: 0 次
1. 编译时需要用-L、-l参数;
2. 运行时需要设置LD_LIBRARY_PATH环境变量来使程序找到对应的库文件。


_________________
人生若只如初见,何事秋风悲画扇?


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2007-05-04 22:53 

注册: 2006-08-12 6:17
帖子: 34
送出感谢: 0 次
接收感谢: 0 次
更好的办法是添入/etc/ld.so.conf, 把需要的库路径添加进去,然后执行 /sbin/ldconfig
需要root权限的


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2007-05-05 13:43 
头像

注册: 2006-12-02 12:25
帖子: 689
送出感谢: 0 次
接收感谢: 0 次
stlxv 写道:
titainium 写道:
找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill


这样并没有解决问题,只是能成功链接而已

运行的时候照样找不到


没有啊?可以正常运行。


_________________
Titainium


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2007-05-08 13:45 
头像

注册: 2006-04-29 20:10
帖子: 175
地址: 北京·昌平
送出感谢: 0 次
接收感谢: 0 次
titainium 写道:
stlxv 写道:
titainium 写道:
找到解决的办法了,编译主程序的时候使用 -L. -lsoname的参数就可以。直接运行主程序,就OK了。

PS:soname是so文件的名字去掉lib,比如有一个libbill.so的文件,soname就应该是bill


这样并没有解决问题,只是能成功链接而已

运行的时候照样找不到


没有啊?可以正常运行。


我估计不会每次都会这么幸运di ^_^
还是按照标准的做法来得好,那样的话不容易出错。


_________________
人生若只如初见,何事秋风悲画扇?


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2007-05-09 11:54 
头像

注册: 2006-12-02 12:25
帖子: 689
送出感谢: 0 次
接收感谢: 0 次
不知道了,我编译的时候指定了so的路径。编译过后,只要保证路径正确,就可以运行。反倒是那种标准的做法,俺试了N次,没有成功过.........


_________________
Titainium


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2007-05-09 12:01 
头像

注册: 2007-03-13 17:26
帖子: 2254
送出感谢: 0 次
接收感谢: 1
sudo ldconfig


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 15 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译