This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: need help producing statically linked executable


Hey Charlie

Thanks. I knew that ldd would list the static libraries.

ldd doesn't really list the static libraries, but it lists the depending shared libraries of an executable/shared libraries (as for example found in the readelf -d output of an ELF executable/shared library)


What I am looking for is an automated way to transform
the dynamic linking command into the static link command.
I guess I can parse the output of ldd through a perl script
that generates "-llinux-vdso -lidn ...". But this seems so
primitive. Isn't there an elegant way to ask the linker
to do that work for you?

I don't know/doubt if there's any solution by using the gcc driver and the -static option. But, maybe the pkg-config utility will do the work for you. It allows you to manually specify all the library dependencies (as returned by the ldd output) and then easily include all these depending libraries into your build. Check out the pkg-config(1) man page.


Some libraries might also be shipped with a pre-configured pkg-config file *.pc. For example, my distro includes a pre-configured file for libcurl under /usr/lib/pkgconf/libcurl.pc. If I then use

pkg-config --static --libs libcurl

I get the following output:

-lcurl -lidn -llber -lldap -lrt -lgssapi_krb5 -lz -lgnutls -lgcrypt

This might not be sufficient because some of the libraries are missing, but you could easily extend this package or create a new one.

You could then include this into your build as follows:

gcc <your_options> -static `pgk-config --static --libs libcurl`


I hope that helps at least a little bit ...


Best regards,
Andi


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]