执行在Unix上的共享库 [英] Executing a shared library on Unix

查看:125
本文介绍了执行在Unix上的共享库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有的Unix共享库的命令行叫,好像他们是可执行文件时,提供的输出。例如:

Some Unix shared libraries provide an output when called from the command line as if they were executables. For example:

$ /lib/libc.so.6 
GNU C Library stable release version 2.13, by Roland McGrath et al.
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.5.2.
Compiled on a Linux 2.6.37 system on 2011-01-18.
[...]

在用C写的我自己的共享库,我怎么能提供这种输出?我现在执行的库我只是做了,我得到一个段故障。

In a shared library of my own written in C, how can I provide this output? I've executed now a library I just made and I get a segment fault.

注:我pviously问这个$ P $上unix.stackechange.com
<一href=\"http://unix.stackexchange.com/questions/7066/executing-a-shared-library\">http://unix.stackexchange.com/questions/7066/executing-a-shared-library

Note: I asked this previously on unix.stackechange.com http://unix.stackexchange.com/questions/7066/executing-a-shared-library

推荐答案

主要的定义如下负责打印您看到的输出。它在的glibc的源代码树的CSU / version.c定义。我希望这有助于。

The below definition of main is responsible for printing the output you see. It is defined in csu/version.c of the source tree of glibc. I hope this helps.


#ifdef HAVE_ELF
/* This function is the entry point for the shared object.
   Running the library as a program will get here.  */

extern void __libc_main (void) __attribute__ ((noreturn));
void
__libc_main (void)
{
  __libc_print_version ();
  _exit (0);
}
#endif

这篇关于执行在Unix上的共享库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆