www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How compile program with curl support?

reply "ilya-stromberg" <ilya-stromberg-2009 yandex.ru> writes:
I try to compile program with curl support, but I have error:

import std.net.curl;

void main()
{
}

rdmd main.d
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function 
`_D3std3net4curl4Curl19_sharedStaticCtor34FZv':
std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticCtor34FZv+0xf): 
undefined reference to `curl_global_init'
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function 
`_D3std3net4curl4Curl19_sharedStaticDtor35FZv':
std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticDtor35FZv+0x5): 
undefined reference to `curl_global_cleanup'

I try to import libcurl.a library, the same problem:
rdmd -L/usr/lib/x86_64-linux-gnu/libcurl.a main.d
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function 
`_D3std3net4curl4Curl19_sharedStaticCtor34FZv':
std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticCtor34FZv+0xf): 
undefined reference to `curl_global_init'
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function 
`_D3std3net4curl4Curl19_sharedStaticDtor35FZv':
std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticDtor35FZv+0x5): 
undefined reference to `curl_global_cleanup'

What should I do to get curl support?
OS is Linux Ubuntu 12.10.
Aug 22 2013
next sibling parent "evilrat" <evilrat666 gmail.com> writes:
On Thursday, 22 August 2013 at 07:28:52 UTC, ilya-stromberg wrote:
 I try to compile program with curl support, but I have error:
 ...
i rarely use rdmd, so i can only advice to try using dmd directly with following flags and see if it works, and if works its a rdmd flags problem in your case: dmd main.d -L-L/path/to/libcurl -L-llibcurlname.a (note that first -L is dmd flag to pass linker options)
Aug 22 2013
prev sibling next sibling parent reply "Ivan Kazmenko" <gassa mail.ru> writes:
On Thursday, 22 August 2013 at 07:28:52 UTC, ilya-stromberg wrote:
 undefined reference to `curl_global_init'
 undefined reference to `curl_global_cleanup'

 What should I do to get curl support?
 OS is Linux Ubuntu 12.10.
I recently had the same problem on Windows (thread: http://forum.dlang.org/thread/wdmqzyqoowrhqfpwduej forum.dlang.org). It boiled down to the following: the lib file contained functions named like "curl_global_init" but the linker searched for "_curl_global_init" (starting with underscore). I don't have OSX available, but the OSX file libcurl.a I downloaded contains underscored names and your linker searches for non-underscored ones, so that may be an inverse problem. Unless some OS-specific linking magic is supposed to take care of that in your case. On Windows, I changed the way to produce libcurl D bindings from implib.exe curl.lib libcurl.dll to implib.exe /system curl.lib libcurl.dll and then I link in order to introduce the underscores. Clearly I'm not an expert, but this may mean you could find a way to [re]produce the bindings library on your side as well. Ivan Kazmenko.
Aug 22 2013
next sibling parent "Ivan Kazmenko" <gassa mail.ru> writes:
On Thursday, 22 August 2013 at 10:00:20 UTC, Ivan Kazmenko wrote:
 and then I link
Sorry, that should have been: and then I link just like dmd myprog.d having both curl.lib (D bindings to C++ binary, built locally) and libcurl.dll (downloaded C++ libcurl binary) findable by the linker (in the same directory in my case).
Aug 22 2013
prev sibling parent "evilrat" <evilrat666 gmail.com> writes:
On Thursday, 22 August 2013 at 10:00:20 UTC, Ivan Kazmenko wrote:
 On Thursday, 22 August 2013 at 07:28:52 UTC, ilya-stromberg 
 wrote:
 undefined reference to `curl_global_init'
 undefined reference to `curl_global_cleanup'

 What should I do to get curl support?
 OS is Linux Ubuntu 12.10.
I recently had the same problem on Windows (thread: http://forum.dlang.org/thread/wdmqzyqoowrhqfpwduej forum.dlang.org). It boiled down to the following: the lib file contained functions named like "curl_global_init" but the linker searched for "_curl_global_init"
underscores is a part of Windows name mangling, this means on Windows one can find both C and its own scheme variant(pascal scheme?), i don't remember all details(though you can easily find it on the internet), but this is explains ur case.
Aug 22 2013
prev sibling parent reply David <d dav1d.de> writes:
 What should I do to get curl support?
 OS is Linux Ubuntu 12.10.
Install libcurl-dev http://packages.ubuntu.com/de/lucid/libcurl-dev Add "-L-lcurl" to your commandline
Aug 22 2013
parent reply "ilya-stromberg" <ilya-stromberg-2009 yandex.ru> writes:
On Thursday, 22 August 2013 at 10:24:49 UTC, David wrote:
 What should I do to get curl support?
 OS is Linux Ubuntu 12.10.
Install libcurl-dev http://packages.ubuntu.com/de/lucid/libcurl-dev Add "-L-lcurl" to your commandline
Thanks for help. Correct answer was here: http://forum.dlang.org/post/mailman.1089.1350735488.5162.digitalmars-d puremagic.com $ dmd -L-lphobos2 -L-lcurl main.d As I can see by google, this is common issue. How can we document the compilation proses?
Aug 22 2013
parent reply "evilrat" <evilrat666 gmail.com> writes:
On Thursday, 22 August 2013 at 13:15:39 UTC, ilya-stromberg wrote:
 On Thursday, 22 August 2013 at 10:24:49 UTC, David wrote:
 What should I do to get curl support?
 OS is Linux Ubuntu 12.10.
Install libcurl-dev http://packages.ubuntu.com/de/lucid/libcurl-dev Add "-L-lcurl" to your commandline
Thanks for help. Correct answer was here: http://forum.dlang.org/post/mailman.1089.1350735488.5162.digitalmars-d puremagic.com $ dmd -L-lphobos2 -L-lcurl main.d As I can see by google, this is common issue. How can we document the compilation proses?
why do u link phobos when compiler do this for you? btw in fact i've seen somewhere on site/wiki/forums instructions "how to build libcurl for D" or something.
Aug 22 2013
next sibling parent reply "ilya-stromberg" <ilya-stromberg-2009 yandex.ru> writes:
On Thursday, 22 August 2013 at 13:20:44 UTC, evilrat wrote:
 why do u link phobos when compiler do this for you?
Because without it doesn't work: $ dmd -L-lcurl main.d /usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticCtor34FZv': std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticCtor34FZv+0xf): undefined reference to `curl_global_init' /usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticDtor35FZv': std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticDtor35FZv+0x5): undefined reference to `curl_global_cleanup' Have you got any ideas why?!
Aug 22 2013
next sibling parent "evilrat" <evilrat666 gmail.com> writes:
On Thursday, 22 August 2013 at 13:27:32 UTC, ilya-stromberg wrote:
 On Thursday, 22 August 2013 at 13:20:44 UTC, evilrat wrote:
 why do u link phobos when compiler do this for you?
Because without it doesn't work: $ dmd -L-lcurl main.d /usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticCtor34FZv': std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticCtor34FZv+0xf): undefined reference to `curl_global_init' /usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticDtor35FZv': std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticDtor35FZv+0x5): undefined reference to `curl_global_cleanup' Have you got any ideas why?!
none really, especially on linux :(
Aug 22 2013
prev sibling parent reply David <d dav1d.de> writes:
Am 22.08.2013 15:27, schrieb ilya-stromberg:
 On Thursday, 22 August 2013 at 13:20:44 UTC, evilrat wrote:
 why do u link phobos when compiler do this for you?
Because without it doesn't work: $ dmd -L-lcurl main.d /usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticCtor34FZv': std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticCtor34FZv+0xf): undefined reference to `curl_global_init' /usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticDtor35FZv': std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticDtor35FZv+0x5): undefined reference to `curl_global_cleanup' Have you got any ideas why?!
Can't reproduce this: ─[dav1d archbox][/tmp]╼ cat c.d import std.net.curl; void main() {} ─[dav1d archbox][/tmp]╼ dmd c.d /usr/lib/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticCtor34FZv': (.text._D3std3net4curl4Curl19_sharedStaticCtor34FZv+0xf): undefined reference to `curl_global_init' /usr/lib/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticDtor35FZv': (.text._D3std3net4curl4Curl19_sharedStaticDtor35FZv+0x5): undefined reference to `curl_global_cleanup' collect2: Fehler: ld gab 1 als Ende-Status zurück --- errorlevel 1 ─[dav1d archbox][/tmp]╼ dmd c.d -L-lcurl ─[dav1d archbox][/tmp]╼ So I only get these errors when *not* linking against curl.
Aug 22 2013
parent reply "ilya-stromberg" <ilya-stromberg-2009 yandex.ru> writes:
On Thursday, 22 August 2013 at 16:28:32 UTC, David wrote:
 Can't reproduce this:

 ─[dav1d archbox][/tmp]╼ cat c.d
 import std.net.curl;

 void main() {}
 ─[dav1d archbox][/tmp]╼ dmd c.d -L-lcurl
 ─[dav1d archbox][/tmp]╼

 So I only get these errors when *not* linking against curl.
It looks like regression. Which OS and compiler version do you use? I have Linux Ubuntu 12.10 and DMD 2.063.2.
Aug 24 2013
parent David <d dav1d.de> writes:
Am 24.08.2013 09:56, schrieb ilya-stromberg:
 On Thursday, 22 August 2013 at 16:28:32 UTC, David wrote:
 Can't reproduce this:

 ─[dav1d archbox][/tmp]╼ cat c.d
 import std.net.curl;

 void main() {}
 ─[dav1d archbox][/tmp]╼ dmd c.d -L-lcurl
 ─[dav1d archbox][/tmp]╼

 So I only get these errors when *not* linking against curl.
It looks like regression. Which OS and compiler version do you use? I have Linux Ubuntu 12.10 and DMD 2.063.2.
Archlinux 64 Bit 2.063.2, and no, this is not a regression, this worked for every DMD release so far.
Aug 24 2013
prev sibling next sibling parent "Gary Willoughby" <dev nomad.so> writes:
On Thursday, 22 August 2013 at 13:20:44 UTC, evilrat wrote:
 why do u link phobos when compiler do this for you?
For some reason the order of linked libs matters especially with curl.
Aug 22 2013
prev sibling parent Jordi Sayol <g.sayol yahoo.es> writes:
On 22/08/13 15:20, evilrat wrote:
 On Thursday, 22 August 2013 at 13:15:39 UTC, ilya-stromberg wrote:
 On Thursday, 22 August 2013 at 10:24:49 UTC, David wrote:
 What should I do to get curl support?
 OS is Linux Ubuntu 12.10.
Install libcurl-dev http://packages.ubuntu.com/de/lucid/libcurl-dev Add "-L-lcurl" to your commandline
Thanks for help. Correct answer was here: http://forum.dlang.org/post/mailman.1089.1350735488.5162.digitalmars-d puremagic.com $ dmd -L-lphobos2 -L-lcurl main.d As I can see by google, this is common issue. How can we document the compilation proses?
why do u link phobos when compiler do this for you?
On static linking, the library order cares. "libphobos2" depends on "libcurl", so "libphobos2" should be passed to the linker before than "libcurl".
 
 btw in fact i've seen somewhere on site/wiki/forums instructions "how to build
libcurl for D" or something.
 
-- Jordi Sayol
Aug 22 2013