I trying to use a library (http://code.google.com/p/qxmpp/) but I can't find the name of t开发者_如何学运维he library to link it to. I want to understand how can you find out the name of the library to use in the linking parameters.
Looks like that is a source archive only -- no binaries included. Have you built the library from it? Where did the build process put it? /usr/lib
or /usr/local/lib
would be usual suspects, but read the build and install documentation in the package.
Given that the name of the library is libqxmpp.a
and (as you mention in a comment) that it's in the usual lib directory (/usr/lib
), you can easily deduce the proper options:
gcc
and other compilers have an -l
switch that finds the library based on the name you give it. By default, it will look in the paths given to GCC at build time (usually /lib
and /usr/lib
) and any others given to /etc/ld.so.conf
. If you add the switch -lX
, it will prepend lib
to the name and by default append .so
and look for any file that looks like libX.so
in any of the lib directories it knows about.
Working backwards, we can deduce that invoking gcc
with -lqxmpp
will look for a file named libqxmpp.so
(actually, it looks for a few other names, too.) How do we get it to look for a .a
file? Those ar
chives (man ar
) are static libraries, so pass the -static
switch just before the library:
gcc -o progname your.o program.o files.o -static -lqxmpp
(If you need to link to other libraries, you may need to add -Wl,-dynamic
for them if you don't want them statically linked or if static libs aren't available.)
Alternatively, you can do this if you know the full path:
gcc -o progname your.o program.o files.o /usr/lib/libqxmpp.a
... And it works just the same.
精彩评论