Way to view public function names in a library

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Xiaoxiao

    #1

    Way to view public function names in a library

    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.
  • Keith Thompson

    #2
    Re: Way to view public function names in a library

    Xiaoxiao <xiaoxiaoyang@l ive.comwrites:
    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_Keit h) kst-u@mib.org <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"

    Comment

    • Nate Eldredge

      #3
      Re: Way to view public function names in a library

      Xiaoxiao <xiaoxiaoyang@l ive.comwrites:
      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'.

      Comment

      • Xiaoxiao

        #4
        Re: Way to view public function names in a library

        On 9 Oct, 14:08, Keith Thompson <ks...@mib.orgw rote:
        Xiaoxiao <xiaoxiaoy...@l ive.comwrites:
        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_Keit h) ks...@mib.org  <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?

        Comment

        • Xiaoxiao

          #5
          Re: Way to view public function names in a library

          On 9 Oct, 14:17, Nate Eldredge <n...@vulcan.la nwrote:
          Xiaoxiao <xiaoxiaoy...@l ive.comwrites:
          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.

          Comment

          • Keith Thompson

            #6
            Re: Way to view public function names in a library

            Xiaoxiao <xiaoxiaoyang@l ive.comwrites:
            On 9 Oct, 14:08, Keith Thompson <ks...@mib.orgw rote:
            >Xiaoxiao <xiaoxiaoy...@l ive.comwrites:
            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_Keit h) kst-u@mib.org <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"

            Comment

            • Flash Gordon

              #7
              Re: Way to view public function names in a library

              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 smap@spam.cause way.com
              If emailing me use my reply-to address
              See the comp.lang.c Wiki hosted by me at http://clc-wiki.net/

              Comment

              • Xiaoxiao

                #8
                Re: Way to view public function names in a library

                On 9 Oct, 14:38, Keith Thompson <ks...@mib.orgw rote:
                Xiaoxiao <xiaoxiaoy...@l ive.comwrites:
                On 9 Oct, 14:08, Keith Thompson <ks...@mib.orgw rote:
                Xiaoxiao <xiaoxiaoy...@l ive.comwrites:
                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_Keit h) ks...@mib.org  <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.

                Comment

                • Nate Eldredge

                  #9
                  Re: Way to view public function names in a library

                  Xiaoxiao <xiaoxiaoyang@l ive.comwrites:
                  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.

                  Comment

                  • Xiaoxiao

                    #10
                    Re: Way to view public function names in a library

                    On 9 Oct, 15:20, Nate Eldredge <n...@vulcan.la nwrote:
                    Xiaoxiao <xiaoxiaoy...@l ive.comwrites:
                    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.

                    Comment

                    • Antoninus Twink

                      #11
                      Re: Way to view public function names in a library

                      On 9 Oct 2008 at 18:17, Nate Eldredge wrote:
                      Xiaoxiao <xiaoxiaoyang@l ive.comwrites:
                      >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.

                      Comment

                      • Nate Eldredge

                        #12
                        Re: Way to view public function names in a library

                        Antoninus Twink <nospam@nospam. invalidwrites:
                        On 9 Oct 2008 at 18:17, Nate Eldredge wrote:
                        >Xiaoxiao <xiaoxiaoyang@l ive.comwrites:
                        >>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.

                        Comment

                        • CBFalconer

                          #13
                          Re: Way to view public function names in a library

                          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.

                          Comment

                          • Xiaoxiao

                            #14
                            Re: Way to view public function names in a library

                            On 9 Oct, 20:24, CBFalconer <cbfalco...@yah oo.comwrote:
                            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.

                            Comment

                            • Antoninus Twink

                              #15
                              Re: Way to view public function names in a library

                              On 10 Oct 2008 at 17:20, Xiaoxiao wrote:
                              On 9 Oct, 20:24, CBFalconer <cbfalco...@yah oo.comwrote:
                              >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...

                              Comment

                              Working...