Link errors with curl, libevent, OpenSSL

Vladimir Panteleev via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jan 24 21:48:25 PST 2015


On my Ubuntu Server, I can't link any D program which uses 
libraries other than Phobos.

Example:

//////////////////////////////
import std.net.curl;
import std.stdio;

void main()
{
     writeln(get("dlang.org"));
}
//////////////////////////////

dlang at k3:~/2015-01-25$ dmd -L-lcurl test.d
/usr/local/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function 
`_D3std3net4curl4HTTP19_sharedStaticCtor34FZv':
/usr/local/src/phobos/std/net/curl.d:2503: undefined reference to 
`curl_version_info'
/usr/local/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function 
`_D3std3net4curl4Curl19_sharedStaticCtor35FZv':
/usr/local/src/phobos/std/net/curl.d:3497: undefined reference to 
`curl_global_init'
/usr/local/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function 
`_D3std3net4curl4Curl19_sharedStaticDtor36FZv':
/usr/local/src/phobos/std/net/curl.d:3503: undefined reference to 
`curl_global_cleanup'
[...]
collect2: error: ld returned 1 exit status
--- errorlevel 1


The library (.a and .so) is installed and DMD passes -lcurl to 
gcc.

This is what DMD runs:

gcc test.o -o test -m64 -lcurl -L/usr/local/lib/x86_64-linux-gnu 
-Xlinker --export-dynamic -l:libphobos2.a -lpthread -lm -lrt

I got the above program to build by editing /etc/dmd.conf and 
adding -L-l:libphobos2.a -L-lcurl to DFLAGS. However, this 
doesn't help when linking with other D libraries, e.g. when using 
Dub.

I believe this problem is documented here:

https://issues.dlang.org/show_bug.cgi?id=7044
https://issues.dlang.org/show_bug.cgi?id=12572

I don't see a workaround that would apply to dub, though.

Is there a fix or workaround? I think this can be fixed in Dub to 
make it pass the libraries in the correct order, but I don't 
normally use Dub so I'm not sure. I sort of need this to be able 
to work on dlang.org - some functionality is only provided by 
posix.mak, which doesn't work under Cygwin.


More information about the Digitalmars-d-learn mailing list