Static linking libssl.a and libcrypto.a on Linux x64 fails

Aijaz Baig aijazbaig1 at gmail.com
Thu Nov 14 00:58:30 UTC 2019


Thank you for the suggestion. Will try that.

Regarding the static library, the term 'linking' I used was more tongue in
cheek but nonetheless. However my current concern here is meeting libSSL
and libCrypto's dependencies on host libraries on Linux platform. For
instance, when I talked about 'linking' errors with respect to symbols like
'dlopen', so as I mentioned, I had to specify '-ldl' and '-lz' to the gcc
linker that suggests a dynamic dependency on these platform libraries.

I was trying to understand the components that would be needed to package
the whole shebang into an archive which I can later 'just run' on a similar
Linux system that has been completely stripped down for purposes of size
and speed

Is there a way to do that?

On Wed, Nov 13, 2019 at 8:04 PM Michael Wojcik <
Michael.Wojcik at microfocus.com> wrote:

> > From: openssl-users [mailto:openssl-users-bounces at openssl.org] On
> Behalf Of Aijaz Baig
> > Sent: Wednesday, November 13, 2019 01:45
>
> > I am trying to statically link libssl.a and libcrypto.a into a static
> library of my own
> > which I will be using in an application (Linux).
>
> You can't link anything into a Linux static library, technically.
>
> ELF static libraries, like the older UNIX static libraries they're
> descended from, are just collections of object files, possibly with some
> additional metadata. (In BSD 4.x, for example, libraries often had an index
> member added using the ranlib utility, so that the linker didn't have to
> search the entire library for each symbol.)
>
> On some platforms, where objects can be relinked, the constituent object
> files produced by compiling source files are sometimes combined into a
> single large object. This is most often seen on AIX, which uses IBM's XCOFF
> object format (an enhanced COFF); XCOFF supports relinking objects, so you
> can bundle objects up this way and save some time in symbol resolution when
> you link against the library later. But even on AIX this is commonly seen
> with dynamic libraries and relatively rare for static ones.
>
> Normally the linker isn't even involved in creating a static library. You
> compile sources to objects, and then use ar(1) to create the static
> library. The makefile you posted to StackOverflow doesn't include this
> step, so it's hard to tell what exactly you're doing.
>
> But in any case, linking a static library against another static library
> is essentially a no-op.
>
> What you *can* do, if you don't want to have to list your library and the
> OpenSSL libraries when linking your application, is combine multiple static
> libraries into a single one - provided the object names don't conflict.
> This is straightforward:
>
> $ mkdir tmp; cd tmp
> $ ar x /path/to/libssl.a
> $ ar x /path/to/libcrypto.a
> $ cp /path/to/your/objects/*.o .
> $ ar c ../your-library.a *.o
> $ cd ..
> $ rm -rf tmp
>
> (Untested, but see the ar manpage if you run into issues.)
>
> That should create a single archive library containing all the objects
> from the three input libraries. Again, it relies on there being no filename
> clashes among the objects; if there are, you'll have to rename some of them.
>
> --
> Michael Wojcik
> Distinguished Engineer, Micro Focus
>
>
>
>

-- 

Best Regards,
Aijaz Baig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mta.openssl.org/pipermail/openssl-users/attachments/20191114/ea113e69/attachment.html>


More information about the openssl-users mailing list