By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,543 Members | 2,174 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,543 IT Pros & Developers. It's quick & easy.

Way to view public function names in a library

P: n/a
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.
Oct 9 '08 #1
Share this Question
Share on Google+
16 Replies


P: n/a
Xiaoxiao <xi**********@live.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_Keith) 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"
Oct 9 '08 #2

P: n/a
Xiaoxiao <xi**********@live.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'.
Oct 9 '08 #3

P: n/a
On 9 Oct, 14:08, Keith Thompson <ks...@mib.orgwrote:
Xiaoxiao <xiaoxiaoy...@live.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_Keith) 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?
Oct 9 '08 #4

P: n/a
On 9 Oct, 14:17, Nate Eldredge <n...@vulcan.lanwrote:
Xiaoxiao <xiaoxiaoy...@live.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.
Oct 9 '08 #5

P: n/a
Xiaoxiao <xi**********@live.comwrites:
On 9 Oct, 14:08, Keith Thompson <ks...@mib.orgwrote:
>Xiaoxiao <xiaoxiaoy...@live.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_Keith) 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"
Oct 9 '08 #6

P: n/a
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 sm**@spam.causeway.com
If emailing me use my reply-to address
See the comp.lang.c Wiki hosted by me at http://clc-wiki.net/
Oct 9 '08 #7

P: n/a
On 9 Oct, 14:38, Keith Thompson <ks...@mib.orgwrote:
Xiaoxiao <xiaoxiaoy...@live.comwrites:
On 9 Oct, 14:08, Keith Thompson <ks...@mib.orgwrote:
Xiaoxiao <xiaoxiaoy...@live.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_Keith) 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.
Oct 9 '08 #8

P: n/a
Xiaoxiao <xi**********@live.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.
Oct 9 '08 #9

P: n/a
On 9 Oct, 15:20, Nate Eldredge <n...@vulcan.lanwrote:
Xiaoxiao <xiaoxiaoy...@live.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.
Oct 9 '08 #10

P: n/a
On 9 Oct 2008 at 18:17, Nate Eldredge wrote:
Xiaoxiao <xi**********@live.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.

Oct 9 '08 #11

P: n/a
Antoninus Twink <no****@nospam.invalidwrites:
On 9 Oct 2008 at 18:17, Nate Eldredge wrote:
>Xiaoxiao <xi**********@live.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.
Oct 9 '08 #12

P: n/a
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.
Oct 10 '08 #13

P: n/a
On 9 Oct, 20:24, CBFalconer <cbfalco...@yahoo.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.
Oct 10 '08 #14

P: n/a
On 10 Oct 2008 at 17:20, Xiaoxiao wrote:
On 9 Oct, 20:24, CBFalconer <cbfalco...@yahoo.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...

Oct 10 '08 #15

P: n/a
Xiaoxiao wrote:
CBFalconer <cbfalco...@yahoo.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.
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.
Oct 10 '08 #16

P: n/a
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.

Oct 10 '08 #17

This discussion thread is closed

Replies have been disabled for this discussion.