2011-02-10 2 views
16

Certaines bibliothèques partagées Unix fournissent une sortie lorsqu'elles sont appelées depuis la ligne de commande comme si elles étaient des exécutables. Par exemple:Exécution d'une bibliothèque partagée sous Unix

$ /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. 
[...] 

Dans une bibliothèque partagée de mon propre écrite en C, comment puis-je fournir cette sortie? J'ai exécuté maintenant une bibliothèque que je viens de faire et j'ai une erreur de segment.

Note: J'ai demandé ce précédemment sur unix.stackechange.com https://unix.stackexchange.com/questions/7066/executing-a-shared-library

+3

Voir aussi http://stackoverflow.com/questions/1449987/building-a-so-that-is-also-an-executable –

+0

@BrianL. Merci, très intéressant! – franziskus

Répondre

10

La définition ci-dessous de la principale est responsable de l'impression de la sortie que vous voyez. Il est défini dans csu/version.c de l'arbre source de la glibc. J'espère que ça aide.

 
#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 
Questions connexes