DLL Hell becomes an issue when executing a program. The EXE needs to use the DLLs that correspond to
the LIB files it was linked against.
I think you're only concerned with building a library or an executable here. The way CMake is
designed is that you simply call find_package(), and the FindX.cmake script is supposed to figure
out the rest.
When it comes to building a Windows installer for your EXE, only then will you have to be concerned
with DLL hell (i.e. add all DLLs to the installer).
Regards,
Andreas
On 04.02.2013 14:05, Ansis Māliņš wrote:
Exactly! So, going back to my original question, how do I use CMake in face of
DLL Hell?
On Mon, Feb 4, 2013 at 2:58 PM, Michael Wild <[email protected]
<mailto:[email protected]>> wrote:
That has nothing to do whether the libraries are shared (i.e. dynamically
linked) or not. It has
to do with the way that packaging works (or rather, doesn't work) on
Windows. In the pre-.NET
era it was simply impossible to use library versioning on Windows. If
package A installed
python.dll version X.Y into C:\Windows\System32 and later package B
installed version Z.F into
the same place, package A stopped working. Further, packagers where
essentially forced to
include all dependencies in their packages because there's no
dependency-resolution mechanism.
That's why people started providing a copy of all the dependencies in the
installation directory
of their package. Of course, this leads to a lot of duplication, especially
for rather popular
things such as Python or Qt. The whole situation is referred to as "DLL
hell":
http://en.wikipedia.org/wiki/DLL_Hell
Michael
On Mon, Feb 4, 2013 at 1:43 PM, Ansis Māliņš <[email protected]
<mailto:[email protected]>> wrote:
If shared libraries on Windows are truly shared, then why so many
applications carry their
own copies of that same Qt and Python? Examples from my own Program
Files: Anki, Blender,
Mixxx, Mumble, TortoiseHg.
On Mon, Feb 4, 2013 at 2:15 PM, Michael Wild <[email protected]
<mailto:[email protected]>>
wrote:
Hi
On Mon, Feb 4, 2013 at 12:43 PM, Ansis Māliņš
<[email protected]
<mailto:[email protected]>> wrote:
I'm just learning CMake and posting questions in this mailing
list, but the answers
I get only confuse me. It seems I must take a step back and ask
more general questions.
In Linux there is a package for everything, so you just
find_package whatever you need.
But on Windows most libraries exist only as zip files that
you're supposed to unpack
right in your build environment and ship them together with the
executable.
(Basically, in practice, there is no such thing as shared
libraries in Windows -
nothing for find_package to find.)
What then are DLL's? They are the shared libraries of the Windows
world. True, the
semantics are a bit different, but they are dynamically linked.
It's also not true that
on Windows everything is a "zip files that you're supposed to
unpack right in your build
environment". If you don't believe me, try to take a look at Qt or
Python.
So how am I supposed to write portable CMake scripts in face of
this?
Often the Windows packages are installed into a few well known
locations, or even
better, create a registry key containing installation information
which you then can use
to find the software in your CMake code. Also, for SDL I would
recommend to use the
FindSDL.cmake module (not sure whether that works with SDL2,
though), and only if that
fails, to resort to ExternalProject. It is good practice to offer
the user the choice
which way should be used through a cached variable.
HTH
Michael
--
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake
--
Scopis GmbH
Blücherstr. 22
10961 Berlin
Germany
E-Mail: [email protected]
Tel.: +49 (30) 201 69 38 0
Fax.: +49 (30) 201 69 38 20
Internet: www.scopis.com
HRB 128315 Berlin Charlottenburg
USt-IdNr.: DE272721463
Steuernummer: 29/014/02034
Geschäftsführer: Bartosz Kosmecki
Diese E-mail, einschließlich der Anhänge, ist ausschließlich für den oben genannten Adressaten
bestimmt und beinhaltet vertrauliche und/oder gesetzlich geschützte Informationen. Jedem anderen
Empfänger ist die Vervielfältigung, Weitergabe oder Veröffentlichung untersagt. Falls Sie diese
Mitteilung irrtümlicherweise erhalten haben, bitten wir um sofortige Information an den Absender und
Vernichtung der E-mail.
This e-mail, including the attachments, is for the exclusive use of the above-named addresses and
contains confidential information and/or information protected by law. Any other recipient is
prohibited from duplicating, passing on to third parties, or publishing this information. If by
error you are the recipient of this communication please inform the sender immediately and
permanently delete this e-mail.
--
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake