Way to view public function names in a library

Discussion in 'C Programming' started by Xiaoxiao, Oct 9, 2008.

  1. Xiaoxiao

    Xiaoxiao Guest

    Hi,

    I got a C library, is there a way to view the public function names in
    this library so that I can use in my C program?

    Thanks.
     
    Xiaoxiao, Oct 9, 2008
    #1
    1. Advertising

  2. Xiaoxiao

    Flash Gordon Guest

    Xiaoxiao wrote, On 09/10/08 18:50:
    > Hi,
    >
    > I got a C library, is there a way to view the public function names in
    > this library so that I can use in my C program?


    The best method is to read the documentation. The second best method is
    to read the header files provided with the library. If no documentation
    or header files are provided then the next best method is to get them,
    followed by using a different library.
    --
    Flash Gordon
    If spamming me sent it to
    If emailing me use my reply-to address
    See the comp.lang.c Wiki hosted by me at http://clc-wiki.net/
     
    Flash Gordon, Oct 9, 2008
    #2
    1. Advertising

  3. Xiaoxiao <> writes:
    > I got a C library, is there a way to view the public function names in
    > this library so that I can use in my C program?


    There is no portable way to do that.

    Your best bet is to read the documentation that (presumably)
    accompanies the library. Just knowing the names of the functions
    doesn't give you enough information.

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Oct 9, 2008
    #3
  4. Xiaoxiao <> writes:

    > Hi,
    >
    > I got a C library, is there a way to view the public function names in
    > this library so that I can use in my C program?


    This is technically off-topic, since it's not about the C language
    itself but about whatever compiler and related tools you are using (you
    didn't say what they are). You should probably look for another group
    that is more specifically dedicated to your system and/or compiler.

    However, on many systems the command that does this is called 'nm'.
     
    Nate Eldredge, Oct 9, 2008
    #4
  5. Xiaoxiao

    Xiaoxiao Guest

    On 9 Oct, 14:08, Keith Thompson <> wrote:
    > Xiaoxiao <> writes:
    > > I got a C library, is there a way to view the public function names in
    > > this library so that I can use in my C program?

    >
    > There is no portable way to do that.
    >
    > Your best bet is to read the documentation that (presumably)
    > accompanies the library.  Just knowing the names of the functions
    > doesn't give you enough information.
    >
    > --
    > Keith Thompson (The_Other_Keith)  <http://www.ghoti.net/~kst>
    > Nokia
    > "We must do something.  This is something.  Therefore, we must do this."
    >     -- Antony Jay and Jonathan Lynn, "Yes Minister"


    Thanks Keith. My question should be how to know the function prototype
    in the shared library. It seems from your answer that there is no way
    to do it except getting the document, is that right?
     
    Xiaoxiao, Oct 9, 2008
    #5
  6. Xiaoxiao

    Xiaoxiao Guest

    On 9 Oct, 14:17, Nate Eldredge <> wrote:
    > Xiaoxiao <> writes:
    > > Hi,

    >
    > > I got a C library, is there a way to view the public function names in
    > > this library so that I can use in my C program?

    >
    > This is technically off-topic, since it's not about the C language
    > itself but about whatever compiler and related tools you are using (you
    > didn't say what they are).  You should probably look for another group
    > that is more specifically dedicated to your system and/or compiler.
    >
    > However, on many systems the command that does this is called 'nm'.


    Thanks Nate. I didn't know where to ask but because I will call it
    from a C function if I can, so I posted the question here. I am going
    to use gcc compiler in Linux to compile my C program. I will check
    'nm' to see what does it do.
     
    Xiaoxiao, Oct 9, 2008
    #6
  7. Xiaoxiao <> writes:
    > On 9 Oct, 14:08, Keith Thompson <> wrote:
    >> Xiaoxiao <> writes:
    >> > I got a C library, is there a way to view the public function names in
    >> > this library so that I can use in my C program?

    >>
    >> There is no portable way to do that.
    >>
    >> Your best bet is to read the documentation that (presumably)
    >> accompanies the library.  Just knowing the names of the functions
    >> doesn't give you enough information.

    >
    > Thanks Keith. My question should be how to know the function prototype
    > in the shared library. It seems from your answer that there is no way
    > to do it except getting the document, is that right?


    That's *probably* right. The format of a shared library, and even
    what kind of information is stored in it, is beyond the scope of the C
    langauge standard. Typically, though, I think all you could get from
    a library is the name and entry point for each function (and the code
    that implements each function). Prototypes are generally available in
    header files. And if the header file is inconsistent with the
    library, you're out of luck.

    But even knowing the prototype for each function, though it might tell
    you how to write a legal call to the function, isn't going to tell you
    how to use it properly. An example from the standard library: knowing
    that printf is declared as:

    int printf(const char * restrict format, ...);

    doesn't tell you what the format string should look like; only the
    documentation can tell you that.

    If you have a library and you want to call functions in that library,
    reading the documentation seems like the obvious answer. The fact
    that you're asking for another way to get information about the
    functions in a library implies that you have another requirement that
    you haven't told us about. If you'll tell us what you're really
    trying to do, we may be able to help (or at least offer advice on
    where you can find information relevant to your system).

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    Nokia
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Oct 9, 2008
    #7
  8. Xiaoxiao

    Xiaoxiao Guest

    On 9 Oct, 14:38, Keith Thompson <> wrote:
    > Xiaoxiao <> writes:
    > > On 9 Oct, 14:08, Keith Thompson <> wrote:
    > >> Xiaoxiao <> writes:
    > >> > I got a C library, is there a way to view the public function names in
    > >> > this library so that I can use in my C program?

    >
    > >> There is no portable way to do that.

    >
    > >> Your best bet is to read the documentation that (presumably)
    > >> accompanies the library.  Just knowing the names of the functions
    > >> doesn't give you enough information.

    >
    > > Thanks Keith. My question should be how to know the function prototype
    > > in the shared library. It seems from your answer that there is no way
    > > to do it except getting the document, is that right?

    >
    > That's *probably* right.  The format of a shared library, and even
    > what kind of information is stored in it, is beyond the scope of the C
    > langauge standard.  Typically, though, I think all you could get from
    > a library is the name and entry point for each function (and the code
    > that implements each function).  Prototypes are generally available in
    > header files.  And if the header file is inconsistent with the
    > library, you're out of luck.
    >
    > But even knowing the prototype for each function, though it might tell
    > you how to write a legal call to the function, isn't going to tell you
    > how to use it properly.  An example from the standard library: knowing
    > that printf is declared as:
    >
    >     int printf(const char * restrict format, ...);
    >
    > doesn't tell you what the format string should look like; only the
    > documentation can tell you that.
    >
    > If you have a library and you want to call functions in that library,
    > reading the documentation seems like the obvious answer.  The fact
    > that you're asking for another way to get information about the
    > functions in a library implies that you have another requirement that
    > you haven't told us about.  If you'll tell us what you're really
    > trying to do, we may be able to help (or at least offer advice on
    > where you can find information relevant to your system).
    >
    > --
    > Keith Thompson (The_Other_Keith)  <http://www.ghoti.net/~kst>
    > Nokia
    > "We must do something.  This is something.  Therefore, we must do this."
    >     -- Antony Jay and Jonathan Lynn, "Yes Minister"


    Thanks a lot for the help, Keith.

    > The fact that you're asking for another way to get information about the
    > functions in a library implies that you have another requirement that
    > you haven't told us about.


    That's true. I got some C source code and shared library from
    somewhere and studying it, and will modify it later, and I don't have
    the document. I saw somewhere in the original C code that calls the
    library functions that I don't know the function prototypes, so that's
    why I was asking. Now after reading your post, I also see that there
    are header files on the library there, then I can get the function
    prototypes from the header files, as you have suggested. But there are
    so many of them, and also as you said, even from the function
    prototypes I will still need the document to use the functions
    correctly.

    I have one more question related to this: in generally, does every
    shared memory go along with a header file or not? I mean, if I will
    create a shared library for someone, do I also need to provide the
    header file to him or not? I checked on the internet on the tutorials
    of shared libary on Linux, and knew that there were static and dynamic
    libraries, but all of them didn't mention whether header files are
    needed to provide to others along with the produced libary. Or the
    header file is just used for indicting the function prototypes in the
    libary and doesn't really need for the application which calls the
    library?

    please forgive my entry level question.

    Thank you so much for your patience and help again.
     
    Xiaoxiao, Oct 9, 2008
    #8
  9. Xiaoxiao <> writes:

    > I have one more question related to this: in generally, does every
    > shared memory go along with a header file or not? I mean, if I will
    > create a shared library for someone, do I also need to provide the
    > header file to him or not?


    Generally, he will need the header file if he wants to compile a program
    that uses the library. If you give him a program that's already
    compiled, together with the shared library, the header file is not needed.
     
    Nate Eldredge, Oct 9, 2008
    #9
  10. Xiaoxiao

    Xiaoxiao Guest

    On 9 Oct, 15:20, Nate Eldredge <> wrote:
    > Xiaoxiao <> writes:
    > > I have one more question related to this: in generally, does every
    > > shared memory go along with a header file or not? I mean, if I will
    > > create a shared library for someone, do I also need to provide the
    > > header file to him or not?

    >
    > Generally, he will need the header file if he wants to compile a program
    > that uses the library.  If you give him a program that's already
    > compiled, together with the shared library, the header file is not needed..


    Thanks a lot for the clarification, Nate. Now I understand them much
    better.
     
    Xiaoxiao, Oct 9, 2008
    #10
  11. On 9 Oct 2008 at 18:17, Nate Eldredge wrote:
    > Xiaoxiao <> writes:
    >> I got a C library, is there a way to view the public function names
    >> in this library so that I can use in my C program?

    >
    > However, on many systems the command that does this is called 'nm'.


    As "Keith Thomson" has pointed out (in an unusually helpful answer for
    him, given that the subject is one that he mistakenly regards is "off
    topic"), while nm will list the *names* of the symbols (like function
    names) in an object file or library, it won't tell you the actual
    prototype of a function - you need the header file for that.

    You should also be aware that if the library has been stripped of
    debugging symbols (this will usually be the case for release versions of
    libraries), then nm won't be able to list the symbols because they'll no
    longer be there.
     
    Antoninus Twink, Oct 9, 2008
    #11
  12. Antoninus Twink <> writes:

    > On 9 Oct 2008 at 18:17, Nate Eldredge wrote:
    >> Xiaoxiao <> writes:
    >>> I got a C library, is there a way to view the public function names
    >>> in this library so that I can use in my C program?

    >>
    >> However, on many systems the command that does this is called 'nm'.

    >
    > As "Keith Thomson" has pointed out (in an unusually helpful answer for
    > him, given that the subject is one that he mistakenly regards is "off
    > topic"), while nm will list the *names* of the symbols (like function
    > names) in an object file or library, it won't tell you the actual
    > prototype of a function - you need the header file for that.


    True.

    > You should also be aware that if the library has been stripped of
    > debugging symbols (this will usually be the case for release versions of
    > libraries), then nm won't be able to list the symbols because they'll no
    > longer be there.


    That's not correct. *Debugging* symbols may be missing, but what's
    needed here are the symbols for the library's functions and variables
    themselves. These must be present, because otherwise it would be
    impossible to link against the library.

    In the case of a shared library, some versions of nm don't show dynamic
    symbols by default, so it may appear that there are no symbols. My
    version of nm uses the -D option to show dynamic symbols, which would
    still be present.

    You are probably thinking of binaries (executables), which often are
    distributed entirely stripped of symbols, as they're no longer needed.
     
    Nate Eldredge, Oct 9, 2008
    #12
  13. Xiaoxiao

    CBFalconer Guest

    Xiaoxiao wrote:
    >
    > I got a C library, is there a way to view the public function
    > names in this library so that I can use in my C program?


    I suggest reading the documentation.

    --
    [mail]: Chuck F (cbfalconer at maineline dot net)
    [page]: <http://cbfalconer.home.att.net>
    Try the download section.
     
    CBFalconer, Oct 10, 2008
    #13
  14. Xiaoxiao

    Xiaoxiao Guest

    On 9 Oct, 20:24, CBFalconer <> wrote:
    > Xiaoxiao wrote:
    >
    > > I got a C library, is there a way to view the public function
    > > names in this library so that I can use in my C program?

    >
    > I suggest reading the documentation.
    >
    > --
    >  [mail]: Chuck F (cbfalconer at maineline dot net)
    >  [page]: <http://cbfalconer.home.att.net>
    >             Try the download section.


    Thanks a lot for more help again. I really appreciate the Internet and
    everyone's unselfish help. When I know something in the future, I will
    also try to help people on their questions.
     
    Xiaoxiao, Oct 10, 2008
    #14
  15. On 10 Oct 2008 at 17:20, Xiaoxiao wrote:
    > On 9 Oct, 20:24, CBFalconer <> wrote:
    >> I suggest reading the documentation.

    >
    > Thanks a lot for more help again. I really appreciate the Internet and
    > everyone's unselfish help.


    Yep - help like that provided by CBF above you won't get anywhere except
    on the internet...
     
    Antoninus Twink, Oct 10, 2008
    #15
  16. Xiaoxiao

    CBFalconer Guest

    Xiaoxiao wrote:
    > CBFalconer <> wrote:
    >> Xiaoxiao wrote:
    >>
    >>> I got a C library, is there a way to view the public function
    >>> names in this library so that I can use in my C program?

    >>
    >> I suggest reading the documentation.
    >>
    >> --
    >> [mail]: Chuck F (cbfalconer at maineline dot net)
    >> [page]: <http://cbfalconer.home.att.net>
    >> Try the download section.

    >
    > Thanks a lot for more help again. I really appreciate the Internet
    > and everyone's unselfish help. When I know something in the future,
    > I will also try to help people on their questions.


    Bad idea. If you send them to a suitable newsgroup, you can answer
    their question there. You will have some assurance that erroneous
    answers will be corrected by other users. This (correction) does
    not necessarily apply without picking the correct group.

    Also, please always delete the signature from any quotation in your
    reply. The signature is everything following the '-- ' sig marker
    (inclusive).

    --
    [mail]: Chuck F (cbfalconer at maineline dot net)
    [page]: <http://cbfalconer.home.att.net>
    Try the download section.
     
    CBFalconer, Oct 10, 2008
    #16
  17. On 10 Oct 2008 at 22:34, CBFalconer wrote:
    > Xiaoxiao wrote:
    >> When I know something in the future, I will also try to help people
    >> on their questions.

    >
    > Bad idea.


    All you need to know about CBF in two words.
     
    Antoninus Twink, Oct 10, 2008
    #17
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Charles A. Lackman
    Replies:
    1
    Views:
    1,374
    smith
    Dec 8, 2004
  2. SpamProof
    Replies:
    0
    Views:
    582
    SpamProof
    Oct 21, 2003
  3. Ares Lagae
    Replies:
    8
    Views:
    451
    Ares Lagae
    Sep 24, 2004
  4. News123
    Replies:
    2
    Views:
    465
    John Machin
    Nov 26, 2008
  5. Parthiv Joshi
    Replies:
    1
    Views:
    708
    Samuel L Matzen
    Jul 6, 2004
Loading...

Share This Page