我正在尝试在使用DMD 2.058的32位Ubuntu Linux(11.10 Ocelot)上使用std.net.curl。

当我构建(dmd source.d)时,我得到:

/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticCtor30FZv':
std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticCtor30FZv+0x6): undefined reference to `curl_global_init'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticDtor31FZv':
std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticDtor31FZv+0x4): undefined reference to `curl_global_cleanup'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libphobos2.a(curl_12fd_140.o): In function `_D3std3net4curl4HTTP4Impl6__dtorMFZv':
std/net/curl.d:(.text._D3std3net4curl4HTTP4Impl6__dtorMFZv+0x12): undefined reference to `curl_slist_free_all'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libphobos2.a(curl_12fd_140.o): In function `_D3std3net4curl4HTTP3dupMFZS3std3net4curl4HTTP':
std/net/curl.d:(.text._D3std3net4curl4HTTP3dupMFZS3std3net4curl4HTTP+0x53): undefined reference to `curl_slist_append'

[snip]

我在命令行中添加了-L-lcurl(完整命令:dmd source.d -L-lcurl),但得到的结果完全相同。我安装了libcurl4-openssl。我可以在此计算机上构建simple C curl程序,而不会出现问题(gcc simple.c -lcurl)。我不确定从哪里可以找到答案。

更新:这是根据dmd -v调用链接器的方式:
gcc source.o -o source -m32 -lcurl -Xlinker -L/usr/lib -Xlinker -L/usr/lib64 -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lphobos2 -lpthread -lm -lrt

最佳答案

您自己发现,库的顺序不正确。引自“GCC简介”:“一个调用另一个库中定义的外部函数的库应该出现在包含该函数的库之前。”在您的情况下libphobos调用外部库的(libcurl)函数,因此我猜libphobos应该在libcurl之前。

该书可在线获得。与旧约相关的章节在这里:http://www.network-theory.co.uk/docs/gccintro/gccintro_18.html

09-06 20:34