On Fri, 29 Jan 2010, Daniel Roßberg wrote:
many programs using these. And there is my point: The programs
memorized the Python, TCL, etc. library version they were build with.
[snip]
Not exactly. When they load the .so-file (equiv. of a DLL) there is one or
more API versions (integer) encoded in the library file. ld looks for a
[snip]
So, they don't look into a manifest file, it's encoded in the so-file.
We have probable a misunderstanding here. In the mentioned paragraph
I wasn't talking about source and object files but about executable
and .deb files. I.e. if I install a .deb file all its dependencies
are mentioned in this file without access to the .so files.
Possibly! :-) Windows is such a pain.
In Linux, this sort of dependency is tracked both in
packaging and at run-time. So, it's possible to have 4 or 5
different versions of librt installed... and it always "does
the right thing." Still, the way libtool works is
fundamental to the way that packaging is done (including
.deb packages).
But searching for "DLL Hell" is still a good direction. I
think the common solution is to have a registry key and GUID
that your package can look up at install-time to see if you
have a compatable version of another piece of software.
For example, I have a program on windows using the MSI
packager with a "Product" GUID of
{6101CFDF-9885-4084-B953-7DDF67232182}. You can look up in
the registry:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{6101CFDF-9885-4084-B953-7DDF67232182}\DisplayVersion
And see that 1.0.7 is installed. There's also a
Major/Minor version number you can query. So, you can set
up your installer to query things about the installation
properties of another piece of software like this.
But that's the extent (or beyond the extent) of my knowlege
in Windows library dependency management. :-)
However, you made an interesting point there: "ld looks for a library
with the right ... internal API version to load." Where does ld know
"the right internal API version" from? (I hope the answer isn't
"libtool". BTW, "man libtool" gives a rather short explanation.)
It's part of the format of the .so files. See:
http://www.gnu.org/software/libtool/manual/
-gabriel
------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
BRL-CAD Developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-devel