dlang
D言語
弱小PHPerのD言語挑戦記
More than 3 years have passed since last update.

curlを使った簡単なものに挑戦

以前の更新からまるまる1ヶ月ほど、PHPでちょっと頼まれたものを作ったりしてました

無論その間Dをやってなかったわけではなく、yukicoderでいろいろ問題を解いたりしてある程度D言語に慣れてきました

ので、前々から触ってみたいと思ってたcurlを使って何かしたいなと...

そこで、解説サイトを見ながら早速簡単なものを


crul.d

import std.stdio;

import std.net.curl;

void main() {
auto hoge = get("www.google.com"); //autoは型を適当にやってくれるので便利ですね
writeln(hoge);
}


で、

rdmd -L-lcurl curl.d

で実行

すると、

/usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): 関数 `_D3std3net4curl4HTTP21_sharedStaticCtor1521FZv' 内:

std/net/curl.d:(.text._D3std3net4curl4HTTP21_sharedStaticCtor1521FZv+0xf): `curl_version_info' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): 関数 `_D3std3net4curl4Curl21_sharedStaticCtor1523FZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl21_sharedStaticCtor1523FZv+0xa): `curl_global_init' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl.o): 関数 `_D3std3net4curl4Curl21_sharedStaticDtor1524FZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl21_sharedStaticDtor1524FZv+0x5): `curl_global_cleanup' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1ca7_192.o): 関数 `_D3std3net4curl4HTTP4Impl6__dtorMFZv' 内:
std/net/curl.d:(.text._D3std3net4curl4HTTP4Impl6__dtorMFZv+0x19): `curl_slist_free_all' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1ccb_ea.o): 関数 `_D3std3net4curl3FTP4Impl6__dtorMFZv' 内:
std/net/curl.d:(.text._D3std3net4curl3FTP4Impl6__dtorMFZv+0x18): `curl_slist_free_all' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1ccb_ea.o): 関数 `_D3std3net4curl3FTP3dupMFZS3std3net4curl3FTP' 内:
std/net/curl.d:(.text._D3std3net4curl3FTP3dupMFZS3std3net4curl3FTP+0xab): `curl_slist_append' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1ccb_ea.o): 関数 `_D3std3net4curl3FTP13clearCommandsMFZv' 内:
std/net/curl.d:(.text._D3std3net4curl3FTP13clearCommandsMFZv+0x20): `curl_slist_free_all' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1ccb_ea.o): 関数 `_D3std3net4curl3FTP10addCommandMFAxaZv' 内:
std/net/curl.d:(.text._D3std3net4curl3FTP10addCommandMFAxaZv+0x67): `curl_slist_append' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cd0_432.o): 関数 `_D3std3net4curl4Curl10initializeMFZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl10initializeMFZv+0x3d): `curl_easy_init' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cd1_149.o): 関数 `_D3std3net4curl4Curl3dupMFZS3std3net4curl4Curl' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl3dupMFZS3std3net4curl4Curl+0x25): `curl_easy_duphandle' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cd5_37c.o): 関数 `_D3std3net4curl4Curl8shutdownMFZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl8shutdownMFZv+0x1a): `curl_easy_cleanup' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cd7_14c.o): 関数 `_D3std3net4curl4Curl3setMFE3etc1c4curl10CurlOptionAxaZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl3setMFE3etc1c4curl10CurlOptionAxaZv+0x5d): `curl_easy_setopt' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cd8_14c.o): 関数 `_D3std3net4curl4Curl3setMFE3etc1c4curl10CurlOptionlZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl3setMFE3etc1c4curl10CurlOptionlZv+0x2e): `curl_easy_setopt' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cd9_14c.o): 関数 `_D3std3net4curl4Curl3setMFE3etc1c4curl10CurlOptionPvZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl3setMFE3etc1c4curl10CurlOptionPvZv+0x2e): `curl_easy_setopt' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cda_207.o): 関数 `_D3std3net4curl4Curl5clearMFE3etc1c4curl10CurlOptionZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl5clearMFE3etc1c4curl10CurlOptionZv+0x28): `curl_easy_setopt' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cdb_67c.o): 関数 `_D3std3net4curl4Curl16clearIfSupportedMFE3etc1c4curl10CurlOptionZv' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl16clearIfSupportedMFE3etc1c4curl10CurlOptionZv+0x28): `curl_easy_setopt' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cdc_2fb.o): 関数 `_D3std3net4curl4Curl7performMFE3std8typecons41__T4FlagVAyaa12_7468726f774f6e4572726f72Z4FlagZi' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl7performMFE3std8typecons41__T4FlagVAyaa12_7468726f774f6e4572726f72Z4FlagZi+0x22): `curl_easy_perform' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cb0_65b.o): 関数 `_D3std3net4curl4HTTP16addRequestHeaderMFAxaAxaZv' 内:
std/net/curl.d:(.text._D3std3net4curl4HTTP16addRequestHeaderMFAxaAxaZv+0x11b): `curl_slist_append' に対する定義されていない参照です
/usr/lib/x86_64-linux-gnu/libphobos2.a(curl_1cd3_4a1.o): 関数 `_D3std3net4curl4Curl11errorStringMFiZAya' 内:
std/net/curl.d:(.text._D3std3net4curl4Curl11errorStringMFiZAya+0x11): `curl_easy_strerror' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
--- errorlevel 1

!?

あれ、どこか間違えてるのかな...

文法は間違ってないだろうし、rdmdのオプションが間違ってるのかな...

ちょっと調べると、curlがインストールされてないとこんな感じになるらしい

ということで、apt-getでインストール

しかしやっぱりエラーを吐く

ちょっとよくわからない...

追記:

dmd ver2.069.0に更新したら動きました

仕様が変わって、動的(オプション無しで?)importしてくれるようになったみたいです