搜索墙首页  编程技术  java  asp  ajax  php  c/c#/c++  数据库  oracle  mysql  db2  操作系统  windows  linux  股吧
首页 > 操作系统 > linux > linux编程
 1         
1楼  cdk 2008-7-11 11:02

今天,我在看lfs时看到,为了测试系统中的glibc的版本,采用了
/lib/libc.so.6 | head -n1  | cut -d" " -f1-7

这和我以前的认知有出入,动态连接库可以直接运行!我尝试运行了一个我自己编写的动态连接库,结果是“Segmentation fault”。

我尝试google了一下,可能是没找对关键字,没有找到有用的信息。

请熟悉这个问题的大侠帮我解释一下,为什么可以直接运行?我自己编写的动态连接库需要做什么工作才能也像这样输出一个帮助性文本?



2楼  swordfish.cn 2008-7-11 13:07

给一个例子

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

const char my_interp[] __attribute__((section(".interp"))) = "/lib/ld-2.5.so";
int main(int argc, char **argv)
{
        printf("executable shared object\n");
        exit(0);
}

void func(void)
{
        printf("func\n");
}

编译方法

gcc -Wall -W -fPIC -shared -o myso.so myso.c -lc -Wl,-e,main

具体的可以 google 一下 create executable shared object

[ 本帖最后由 swordfish.cn 于 2008-7-11 13:08 编辑 ]




本帖最近评分记录
MMMIX   2008-7-11 20:38  可用积分  +3   精品文章
3楼  MMMIX 2008-7-11 20:35

/lib/ld-2.5.so 换成 /lib/ld-linux.so.2 似乎要好一些。



4楼  Godbach 2008-7-12 09:24

偶也头一次听说,学习了。。



5楼  swordfish.cn 2008-7-12 13:14



QUOTE:
原帖由 MMMIX 于 2008-7-11 20:35 发表
/lib/ld-2.5.so 换成 /lib/ld-linux.so.2 似乎要好一些。

在我的机器上 ld-linux.so.2 其实是指向 ld-2.5.so 的一个软连接。
所以我就直接写那一个了。



6楼  swordfish.cn 2008-7-12 13:19

shared object 一样是 ELF 格式的文件,关键是有没有入口的问题。这里通过

-Wl,-e,main

向 ld 传递参数,指定入口为 main 函数。其实这里吧 main 改为 func 也是可以的,但是要在 func  中加上 exit(0),不然会 segfault 的。



7楼  MMMIX 2008-7-13 14:26



QUOTE:
原帖由 swordfish.cn 于 2008-7-12 13:14 发表


在我的机器上 ld-linux.so.2 其实是指向 ld-2.5.so 的一个软连接。
所以我就直接写那一个了。

在我的机器上,ld-linux.so.2 是指向 ld-2.7.so 的,因此当使用 ld-2.5.so 时,通过 shell 执行 myso.so 就出现了一个十分诡异的问题,shell 报错说 no such file, ldd 也报同样的错误。



8楼  cdk 2008-7-14 15:00

受教了,谢谢swordfish.cn



 1         
您的发言将按有关规定都会存档,您须为所发表后果负责,请您遵纪守法并注意语言文明。
标题: [保留]
热门关注
标题回复点击
[保留]7667
man page3487
error: expected `,' or `...' before numeric constant是什么错误啊???4454
LINUX应用程序开发指南 下载91395
application/zip和application/x-zip-compressed是什么格式啊? 谢谢3394
急:在非 socket 上进行了 socket 操作?1367
linux编程到底要不要学C++38303
shell脚本问题29275
请问<sys/types>这些头文件怎么安装--在线等25274
c函数2248
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源