libphobos.so libdruntime.so

Jacob Carlborg doob at me.com
Fri Feb 3 00:52:47 PST 2012


On 2012-02-03 02:33, Jonathan M Davis wrote:
> On Friday, February 03, 2012 02:29:20 Marco Leise wrote:
>> As time goes by the D runtime will have it's place on Unix systems next to
>> the C runtime. The upcoming support for PIC is the next step. Now I just
>> want to quickly raise awareness for "sonames". For any library, there may
>> be several incompatible versions installed, since new features are added
>> and old features a deprecated. This happens in Phobos as well, no doubt
>>
>> :). So the solution is to put the version in the library name as well, so
>>
>> they can coexist in the same directory (/usr/lib).
>>
>> Here is an example for the two versions of libunique I have installed:
>> 	/usr/lib64/libunique-1.0.so         (link to
>> /usr/lib64/libunique-1.0.so.0.100.6)
>> 	/usr/lib64/libunique-1.0.so.0       (link to
>> /usr/lib64/libunique-1.0.so.0.100.6)
>> 	/usr/lib64/libunique-1.0.so.0.100.6
>> 	/usr/lib64/libunique-3.0.so         (link to
>> /usr/lib64/libunique-3.0.so.0.0.2)
>> 	/usr/lib64/libunique-3.0.so.0       (link to
>> /usr/lib64/libunique-3.0.so.0.0.2)
>> 	/usr/lib64/libunique-3.0.so.0.0.2
>> As you can see there is actually the full version down to the tiniest
>> minor version appended to the file name and several layers of coarser
>> versioning. An application can now link against libunique-1.0.so to get
>> the old API and /usr/lib64/libunique-3.0.so to get the new API.
>>
>> The same has to happen with druntime and Phobos2 or otherwise our programs
>> will break with every new release that deprecates or changes non-template
>> functions. That would probably be *every* release at the moment, so it
>> could look like this:
>> /usr/lib64/libphobos2.so     (link to /usr/lib64/libphobos2.so.060)
>> /usr/lib64/libphobos2.so.058
>> /usr/lib64/libphobos2.so.059
>> /usr/lib64/libphobos2.so.060
>> /usr/lib64/libdruntime.so     (link to /usr/lib64/libdruntime.so.060)
>> /usr/lib64/libdruntime.so.058
>> /usr/lib64/libdruntime.so.059
>> /usr/lib64/libdruntime.so.060
>>
>> There are two steps involved in getting this out of the door now:
>> 1) I'm not an expert with these things, but from the looks of it, I think
>> the Makefile should handle appending the version string
>> 2) The runtime should be downloadable as a separate package (like the
>> famous MSVC Runtime Redistributables)
>> Developers have three choices then:
>> - static linking
>> - packaging the so/dll with their application (always using the
>> tested-works version)
>> - use the system installation of druntime/Phobos2 (benefit from patches
>> (as far as WinSxS doesn't intervene))
>
> I would point out that druntime is bundled with libphobos.a. I wouldn't expect
> libdruntime to be on the system.
>
> - Jonathan M Davis

If Phobos and druntime would be compiled as dynamic libraries both 
libphobos and libdruntime would be needed to be shipped.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list