[MinGW-Users] Need advice on how to include OpenSSL statically in linux/windows crossbuild DLL

Back to archive index
Benedikt Hallinger beni****@halli*****
Thu Jan 7 01:23:23 JST 2021


Hello,
i googled and added the -static flag to the mingw build of OpenSSL.
That seemed to do the trick - i have no idea why the other libssl.a did 
not work, tough.

Thanks for your advice!!!


Am 2021-01-06 16:04, schrieb Eli Zaretskii:
>> Date: Tue, 05 Jan 2021 23:20:17 +0100
>> From: Benedikt Hallinger <beni****@halli*****>
>> 
>> in my project fgcom-mumble (https://github.com/hbeni/fgcom-mumble) i
>> build a windows DLL from linux.
>> This all wents good so far and the DLL looks good when i do not 
>> include
>> SSL.
>> 
>> When i do, the compilation succeeds, but two DLL entries are reported
>> missing from the final generated DLL, and i really struggle to find 
>> out
>> why.
>> The missing bits are OpenSSLs libcrypto and libssl, against which i 
>> link
>> statically (i try to at least).
>> I have seen this with https://github.com/lucasg/Dependencies tool.
>> 
>> The makefile generates this command:
>> x86_64-w64-mingw32-g++-posix -fPIC --shared -DMINGW_WIN64 -o
>> fgcom-mumble.dll lib/io_plugin.cpp lib/radio_model.cpp lib/audio.cpp
>> lib/io_UDPServer.cpp lib/io_UDPClient.cpp lib/garbage_collector.cpp
>> fgcom-mumble.cpp -L./lib/openssl/ -static -lssl.dll -lcrypto.dll
>> -DSSLFLAGS -lws2_32 -lcrypt32 -static-libgcc -static-libstdc++ -I.
>> -I./lib -g3 -DDEBUG -I./lib/openssl/include/ -Wl,-Bstatic -lstdc++
>> -lpthread -lws2_32
> 
> First, I think you are in the wrong forum, because the above indicates
> you are using MinGW64 tools, not MinGW tools from mingw.org.  This
> mailing list is for the latter.
> 
>> ./lib/openssl/libcrypto.dll.a and ./lib/openssl/libssl.dll.a are there
>> and resolved (if i rename them, the build fails).
> 
> The Dependencies display indicates that the program expects to find
> libcrypto-1_1-x64.dll and libssl-1_1-x64.dll.  My guess is that the
> link-time switches you used, -lssl.dll and -lcrypto.dll, caused the
> linker to find libssl.dll.a and libcrypto.dll.a, which are import
> libraries, so linking against them made your program dependent on the
> above 2 DLLs, which is not what you wanted.
> 
> To link statically against these libraries, you need to make sure you
> have libssl.a and libcrypto.a, which are static libraries, and link
> with -lssl and -lcrypto switches instead.  If you don't have libssl.a
> and libcrypto.a, then your system doesn't have the static libraries,
> and you cannot link program statically against them.
> 
>> My impression was that the "static" switch should have included the 
>> dlls
>> into my archive.
> 
> It didn't, and it cannot: DLLs cannot be statically linked, AFAIK.
> What you did was statically link against the _import_ libraries, which
> make your program depend on the DLLs at run time.
> 
> _______________________________________________
> MinGW-Users mailing list
> MinGW****@lists*****
> 
> This list observes the Posting Etiquette, as described at
> https://mingw.osdn.io/index.html?page=mailing.html#list-etiquette.
> We ask that you be polite and do the same.  Disregard for the list
> etiquette may cause your account to be moderated.
> 
> _______________________________________________
> You may change your MinGW Account Options or unsubscribe at:
> https://lists.osdn.me/mailman/listinfo/mingw-users
> Also: mailto:mingw****@lists*****?subject=unsubscribe



More information about the MinGW-Users mailing list
Back to archive index