A valid code that won't run?

Dicebot via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 24 14:06:57 PDT 2015


On Friday, 24 April 2015 at 20:52:16 UTC, Steven Schveighoffer 
wrote:
> On 4/24/15 4:36 PM, Dicebot wrote:
>> On Friday, 24 April 2015 at 20:27:28 UTC, Steven Schveighoffer 
>> wrote:
>>> If pragma(lib, "libcurl"); doesn't work normally, then we 
>>> should
>>> remove std.net.curl, and put it in dub.
>>
>> It was a historical mistake, discussed many time over and 
>> over. Yes, it
>> shouldn't be in Phobos. No, we can't remove it now that easily.
>
> deprecated("Please use dub for curl");
> module std.net.curl

Not really feasible until dub is part of standard distribution.

> // this will cause an error until you install the binding, then 
> you can
> // go through your imports and update them.
> public import some.dub.project;
>
>> As for pragma(lib) - it can never work "normally". Linking 
>> 3d-party
>> libraries is very platform-specific task that causes great 
>> deal of
>> complexity in build systems. It can't be replaced by a single 
>> trivial
>> compiler pragma. There is a reason nothing but Windows build 
>> of DMD
>> supports it.
>
> You are right about not having pragma(lib anywhere but windows, 
> but we do depend on 3rd party libs -- libc, libm, librt, etc. 
> They are just always in the right places.

It isn't that simple. On Linux it uses gcc for linking making use 
of the fact those libraries are also needed for C applications 
and system-wide installation of GCC already knows it.

> I'm not quite sure where libcurl would be except /usr/lib, and 
> why -L-lcurl wouldn't work (and therefore pragma(lib ). Seems 
> like all the issues are for people who custom-build or 
> custom-install libcurl.

Typical example is when in specific distro library name includes 
major version number in the static library name, i.e. libcurl4.a
Another case is multilib paths, those are not uniform either (I 
add -L-L/usr/lib32 to default dmd.conf for it to work)

In general the more obscure and less "established" library you 
want to link, the more complicated it is to do in cross-platform 
way. This is why `pragma(lib)` is design failure.


More information about the Digitalmars-d mailing list