static linking libssl and libcrypto

Aijaz Baig aijazbaig1 at gmail.com
Wed Nov 6 10:28:01 UTC 2019


Ok. Got it. Thanks

On Wed, Nov 6, 2019 at 1:41 PM Brice André <brice at famille-andre.be> wrote:

> Then it means you properly compiled SSL in static.
>
> Regarding my first point, what I mean is that : if you statically link
> your libApp.so with ssl library, it will no need any dynamic library
> dependencies, which is probably what you want. But your libApp.so will be
> loaded by a program. If this program also uses SSL (direct access, not
> through your libApp.so library), and performs a dynamic link, you will
> still need the ssl.so to run your application, even if your dll is
> statically linked with it.
>
> Regards,
> Brice
>
>
> Le mar. 5 nov. 2019 à 18:24, Aijaz Baig <aijazbaig1 at gmail.com> a écrit :
>
>> ldd libAPP.so does NOT have any reference to libSSL.so or for that matter
>> any SSL library. Which is why I had to use nm to check for SSL related
>> symbols
>>
>> On Mon, Nov 4, 2019 at 6:31 PM Floodeenjr, Thomas <
>> thomas_floodeenjr at mentor.com> wrote:
>>
>>> To check if you are linked statically or dynamically, what does ldd tell
>>> you? (ldd libAPP.so) Your library should not have a dependency on
>>> libssl.so or libcrypto.so if you are linked statically.
>>>
>>>
>>>
>>> -Tom
>>>
>>>
>>>
>>> *From:* openssl-users [mailto:openssl-users-bounces at openssl.org] *On
>>> Behalf Of *Aijaz Baig
>>> *Sent:* Sunday, November 3, 2019 11:30 PM
>>> *To:* openssl-users at openssl.org
>>> *Subject:* static linking libssl and libcrypto
>>>
>>>
>>>
>>> I am trying to build a shared library that internally links openssl and
>>> crypto libraries statically so I can use it in a production environment. To
>>> that end I am using the following Makefile
>>>
>>> APPBASE=/home/AB/Documents/APP/APP_2.17.0
>>>
>>> OPENSSL1.0.2p_INSTALL_LOC=/home/AB/Documents/APP/OpenSSL-1.0.2p-installation
>>>
>>> CC=gcc
>>>
>>> CFLAGS= -Wall -g -O -fPIC
>>>
>>> RM= rm -f
>>>
>>> .PHONY: all clean
>>>
>>>
>>>
>>> src=$(wildcard *Generic/*.c *Linux/*.c)
>>>
>>> $(info source=$(src))
>>>
>>>
>>>
>>> #we use the custom compiled openssl version
>>>
>>> #and NOT the one available on the system
>>>
>>> #INC=-I/usr/include/openssl
>>>
>>> INC+=-I$(OPENSSL1.0.2p_INSTALL_LOC)/include/openssl
>>>
>>> INC+=$(foreach d,$(incdir),-I$d)
>>>
>>> $(info includes=$(INC))
>>>
>>>
>>>
>>> LIB=-L$(OPENSSL1.0.2p_INSTALL_LOC)/lib
>>>
>>> #LIB=-llibssl -llibcrypto
>>>
>>> LIB+=-lssl -lcrypto
>>>
>>> $(info links=$(LIB))
>>>
>>> #LIB+=-L/usr/lib/
>>>
>>>
>>>
>>> obj=$(src:.c=.o)
>>>
>>> all: libAPP.so
>>>
>>> clean:
>>>
>>>     $(RM) *.o *.so
>>>
>>>     $(shell find $(APPBASE) -type f -iname "*.o" -exec rm -rf {} \;)
>>>
>>>
>>>
>>> .c.o:
>>>
>>>     ${CC} -static ${CFLAGS} $(INC) -c $< $(LIB) -o $@
>>>
>>>
>>>
>>> libAPP.so: $(obj)
>>>
>>>     $(LINK.c) -shared $^ -o $@
>>>
>>> As mentioned here (
>>> https://stackoverflow.com/questions/18185618/how-to-use-static-linking-with-openssl-in-c-c/25811538#25811538),
>>> I've changed the linker flags to:
>>>
>>> -lcrypto -lz -ldl -static-libgcc
>>>
>>>
>>>
>>> but it doesn't seem to change the size of the generated so file. On
>>> checking for references to SSL in this so file, I see there are a total of
>>> 87 entries
>>>
>>>
>>>
>>> nm libAPP.so | grep -i "ssl" | wc -l
>>>
>>> 87
>>>
>>>
>>>
>>> whereas listing *only* the global symbols from libssl.a tells me it has
>>> 1113 globally defined symbols.
>>>
>>> nm -g ../OpenSSL-1.0.2p-installation/lib/libssl.a | grep -i "ssl" | wc
>>> -l
>>>
>>> 1113
>>>
>>>
>>>
>>> I do not know if libSSL got indeed linked statically or not. Could
>>> someone please shed some light on it?
>>>
>>>
>>>
>>> --
>>>
>>>
>>> Best Regards,
>>>
>>> Aijaz Baig
>>>
>>
>>
>> --
>>
>> Best Regards,
>> Aijaz Baig
>>
>

-- 

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


More information about the openssl-users mailing list