我正在尝试使用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]
Run Code Online (Sandbox Code Playgroud)
我添加-L-lcurl
到我的命令行(完整命令:) dmd source.d -L-lcurl
但我得到完全相同的结果.我安装了libcurl4-openssl.我可以在这台计算机上构建一个简单的C卷曲程序而不会出现问题(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
Run Code Online (Sandbox Code Playgroud)
正如您自己发现的那样,库的顺序是不正确的.引自"GCC简介":"调用另一个库中定义的外部函数的库应该出现在包含该函数的库之前." 在你的情况下libphobos
调用外部库(libcurl)函数,所以我想libphobos
应该去之前libcurl
.
这本书可在线获取.有关OT的章节在这里:http://www.network-theory.co.uk/docs/gccintro/gccintro_18.html
小智 5
在这方面,DMD编译器显然已被打破.我发布了一个补丁来修复它(可能不是最好的),但编译器的维护者并不相信这需要修复,因此没有太多关于它的讨论.
我想通了,如果我通过获取链接器命令-v
并对它进行重新排序,那么它就-lcurl
可以毫无问题地链接到末尾。
gcc source.o -o source -m32 -Xlinker -L/usr/lib -Xlinker -L/usr/lib64 -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lphobos2 -lpthread -lm -lrt -lcurl
Run Code Online (Sandbox Code Playgroud)
我仍然很好奇是否有一种方法可以解决这个问题而无需手动运行链接器。
归档时间: |
|
查看次数: |
1447 次 |
最近记录: |