当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 关于共享库so的制作问题
帖子发表于 : 2010-11-24 11:57 
头像

注册: 2005-08-22 14:05
帖子: 1743
地址: 离开北京
送出感谢: 1
接收感谢: 3
我做过一些关于linux共享库的东西。但是做的感觉慢粗糙的。

我的共享库都是直接由 .o文件 gcc -shared。所有的链接符号都在so文件中,可以用nm xxx.so 直接看到里面有些什么函数的。

好像有说这种链接方式不大好,特别是性能比较差。。。

推荐so中没有符号,所有链接所需要符号都做到一个.a的静态库中。编译链接可执行文件过程不需要so文件参与。

只在程序运行时有静态库中代码载入共享库相应地址执行。

看了下 /usr/lib 下面的库文件,大部分需要性能的库都作成了这种方式。比如libm.so等。

这种库要怎么做呢?求点化


_________________
错过好多好贴,没占到广告位后悔啊


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 关于共享库so的制作问题
帖子发表于 : 2010-12-07 23:14 
头像

注册: 2008-07-29 8:01
帖子: 89
送出感谢: 0 次
接收感谢: 0 次
不是这样的:
http://ly50247.appspot.com/2010/12/7/nm_readelf_so.html


_________________
http://ly50247.diandian.com


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 关于共享库so的制作问题
帖子发表于 : 2010-12-08 17:06 
头像

注册: 2005-08-22 14:05
帖子: 1743
地址: 离开北京
送出感谢: 1
接收感谢: 3
ly50247 写道:


你吧so里面的符号给strip之后没有.a文件就没法链接了。
能知道怎么作那个.a文件吗?


windows 下面也有同样的东西。用def导出函数就会导致dll中有符号
如果在函数申明是用dllexport 就会有一个静态库引出它的函数符号

关键是知道两种方式的不同阿。

如果用-share 生成的东东在strip一下。先前链接过的可执行文件还能执行吗?


_________________
错过好多好贴,没占到广告位后悔啊


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 关于共享库so的制作问题
帖子发表于 : 2010-12-08 17:59 
头像

注册: 2008-07-29 8:01
帖子: 89
送出感谢: 0 次
接收感谢: 0 次
ttand 写道:
ly50247 写道:


你吧so里面的符号给strip之后没有.a文件就没法链接了。
能知道怎么作那个.a文件吗?


windows 下面也有同样的东西。用def导出函数就会导致dll中有符号
如果在函数申明是用dllexport 就会有一个静态库引出它的函数符号

关键是知道两种方式的不同阿。

如果用-share 生成的东东在strip一下。先前链接过的可执行文件还能执行吗?


你完全可以自己试试:

test.cpp:

#include <iostream>

using namespace std;

int fun()
{
cout << "good";


return 0;
}


c++.cpp

#include <iostream>

using namespace std;

int fun();
int main()
{
fun();



return 0;
}


g++ -shared test.cpp -o libtest.so

strip libtest.so

g++ c++.cpp -ltest -L`pwd`

sudo cp libtest.so /usr/lib/libtest.so

./a.out

完全正常。
在linux下.so是不需要.a。


_________________
http://ly50247.diandian.com


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 关于共享库so的制作问题
帖子发表于 : 2010-12-09 10:39 
头像

注册: 2005-08-22 14:05
帖子: 1743
地址: 离开北京
送出感谢: 1
接收感谢: 3
的确如此,

感谢楼上的C++控了

纯c也一样,我试过了


_________________
错过好多好贴,没占到广告位后悔啊


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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