标签:blog class code tar ext http
1>下载CURL源代码curl-7.26.0.zip
2>用VC2008/2005打开工程curl-7.26.0\lib\libcurl.vcproj,转换下工程并构建,可以直接编译成功!
3>新建个控制台工程测试下刚才编译的静态库libcurl.lib,可以在libcurl\curl-7.26.0\docs\examples目录找个简单的使用curl的例子,在这个工程选项Configuration Properties-| C/C++ -|General -|Additional Include Directories 路径中加入curl7.26\include, 在linker选项卡,指定静态库路径和静态库的名字libcurl.lib,代码如下
此时cpp文件可以编译,但是链接报错
1>testcurl.obj : error LNK2001: unresolved external symbol
__imp__curl_easy_init
1>testcurl.obj : error LNK2001: unresolved external
symbol __imp__curl_easy_setopt
1>testcurl.obj : error LNK2001: unresolved
external symbol __imp__curl_easy_perform
1>testcurl.obj : error LNK2001:
unresolved external symbol __imp__curl_easy_cleanup
看样子根本没有链接静态库,虽然刚才指定了库的路径,确认库路径的名字没错,于是看了下curl_easy_init 这个函数的定义,
看到这里于是明白了,如下操作:
在libcurl静态库工程选项Configuration Properties-| C/C++ -| Preprocessor
中加上BUILDING_LIBCURL宏
在测试工程选项Configuration Properties-| C/C++ -| Preprocessor
中加上CURL_STATICLIB宏,然后依次重新构建两个工程
发现测试工程链接不过
1>libcurl_MT.lib(easy.obj) : error LNK2001: unresolved external
symbol __imp__WSACleanup@0
1>libcurl_MT.lib(telnet.obj)
: error LNK2001: unresolved external symbol __imp__WSACleanup@0
1>libcurl_MT.lib(easy.obj)
: error LNK2001: unresolved external symbol __imp__WSAStartup@8
1>libcurl_MT.lib(telnet.obj)
: error LNK2001: unresolved external symbol __imp__WSAStartup@8
1>libcurl_MT.lib(tftp.obj)
: error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
1>libcurl_MT.lib(telnet.obj)
: error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
1>libcurl_MT.lib(ftp.obj) : error LNK2001: unresolved external symbol__imp__WSAGetLastError@0
1>libcurl_MT.lib(select.obj)
: error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
1>libcurl_MT.lib(asyn-thread.obj)
: error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
1>libcurl_MT.lib(transfer.obj)
: error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
1>libcurl_MT.lib(sendf.obj)
: error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__WSAGetLastError@0
1>libcurl_MT.lib(sendf.obj)
: error LNK2001: unresolved external symbol __imp__send@16
1>libcurl_MT.lib(telnet.obj)
: error LNK2001: unresolved external symbol __imp__send@16
1>libcurl_MT.lib(sendf.obj)
: error LNK2001: unresolved external symbol __imp__recv@16
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__recv@16
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__getsockname@12
1>libcurl_MT.lib(ftp.obj) : error LNK2001: unresolved external symbol__imp__getsockname@12
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__getpeername@12
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__ntohs@4
1>libcurl_MT.lib(telnet.obj)
: error LNK2001: unresolved external symbol __imp__ntohs@4
1>libcurl_MT.lib(ftp.obj)
: error LNK2001: unresolved external symbol__imp__ntohs@4
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__WSASetLastError@4
1>libcurl_MT.lib(curl_addrinfo.obj)
: error LNK2001: unresolved external symbol __imp__WSASetLastError@4
1>libcurl_MT.lib(select.obj)
: error LNK2001: unresolved external symbol __imp__WSASetLastError@4
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__getsockopt@20
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__setsockopt@20
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__connect@12
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__bind@12
1>libcurl_MT.lib(tftp.obj)
: error LNK2001: unresolved external symbol __imp__bind@12
1>libcurl_MT.lib(ftp.obj)
: error LNK2001: unresolved external symbol__imp__bind@12
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__htons@4
1>libcurl_MT.lib(curl_addrinfo.obj)
: error LNK2001: unresolved external symbol __imp__htons@4
1>libcurl_MT.lib(telnet.obj)
: error LNK2001: unresolved external symbol __imp__htons@4
1>libcurl_MT.lib(ftp.obj)
: error LNK2001: unresolved external symbol__imp__htons@4
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__closesocket@4
1>libcurl_MT.lib(connect.obj)
: error LNK2001: unresolved external symbol __imp__socket@12
1>libcurl_MT.lib(curl_addrinfo.obj)
: error LNK2001: unresolved external symbol __imp__freeaddrinfo@4
1>libcurl_MT.lib(curl_addrinfo.obj)
: error LNK2001: unresolved external symbol __imp__getaddrinfo@16
1>libcurl_MT.lib(tftp.obj)
: error LNK2001: unresolved external symbol __imp__sendto@24
1>libcurl_MT.lib(tftp.obj)
: error LNK2001: unresolved external symbol __imp__recvfrom@24
1>libcurl_MT.lib(ldap.obj)
: error LNK2001: unresolved external symbol
__imp__ldap_unbind_s
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_msgfree
1>libcurl_MT.lib(ldap.obj)
: error LNK2001: unresolved external symbol
__imp__ber_free
1>libcurl_MT.lib(ldap.obj) : error LNK2001: unresolved
external symbol __imp__ldap_memfree
1>libcurl_MT.lib(ldap.obj) : error
LNK2001: unresolved external symbol
__imp__ldap_value_free_len
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol
__imp__ldap_get_values_len
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol
__imp__ldap_next_attribute
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol
__imp__ldap_first_attribute
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_get_dn
1>libcurl_MT.lib(ldap.obj) :
error LNK2001: unresolved external symbol
__imp__ldap_next_entry
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol
__imp__ldap_first_entry
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_search_s
1>libcurl_MT.lib(ldap.obj)
: error LNK2001: unresolved external symbol
__imp__ldap_simple_bind_s
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_init
1>libcurl_MT.lib(ldap.obj) :
error LNK2001: unresolved external symbol
__imp__ldap_set_option
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_err2string
1>libcurl_MT.lib(ftp.obj) : error LNK2001: unresolved external symbol__imp__listen@8
1>libcurl_MT.lib(ftp.obj) : error LNK2001: unresolved external symbol__imp__accept@12
1>libcurl_MT.lib(select.obj)
: error LNK2001: unresolved external symbol ___WSAFDIsSet@8
1>libcurl_MT.lib(select.obj)
: error LNK2001: unresolved external symbol __imp__select@20
1>libcurl_MT.lib(nonblock.obj)
: error LNK2001: unresolved external symbol __imp__ioctlsocket@12
1>libcurl_MT.lib(curl_gethostname.obj)
: error LNK2001: unresolved external symbol__imp__gethostname@8
谷歌了下, WSACleanup function msdn 是需要链接Ws2_32.lib,
同样的道理
1>libcurl_MT.lib(ldap.obj) : error LNK2001: unresolved external symbol
__imp__ldap_unbind_s
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_msgfree
1>libcurl_MT.lib(ldap.obj)
: error LNK2001: unresolved external symbol
__imp__ber_free
1>libcurl_MT.lib(ldap.obj) : error LNK2001: unresolved
external symbol __imp__ldap_memfree
1>libcurl_MT.lib(ldap.obj) : error
LNK2001: unresolved external symbol
__imp__ldap_value_free_len
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol
__imp__ldap_get_values_len
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol
__imp__ldap_next_attribute
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol
__imp__ldap_first_attribute
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_get_dn
1>libcurl_MT.lib(ldap.obj) :
error LNK2001: unresolved external symbol
__imp__ldap_next_entry
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol
__imp__ldap_first_entry
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_search_s
1>libcurl_MT.lib(ldap.obj)
: error LNK2001: unresolved external symbol
__imp__ldap_simple_bind_s
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_init
1>libcurl_MT.lib(ldap.obj) :
error LNK2001: unresolved external symbol
__imp__ldap_set_option
1>libcurl_MT.lib(ldap.obj) : error LNK2001:
unresolved external symbol __imp__ldap_err2string
是少了Wldap32.lib
在libcurl静态库工程选项Configuration Properties-|Librarian -| Additional Dependencies 中加上依赖项Ws2_32.lib Wldap32.lib
再依次重编两个工程,就OK了
编译选项设为/MD时候,不需要添加Ws2_32.lib Wldap32.lib
小结:
1>对于开源代码的编译问题,还是要从代码入手,包括注释
2>静态库构建的时候很容易,但是要知道是不是成功的,还得编个测试工程才能知道是不是真的OK
vc2008构建和使用libcurl静态库,布布扣,bubuko.com
标签:blog class code tar ext http
原文地址:http://www.cnblogs.com/lidabo/p/3708658.html