- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
有如下代码:
#include <stdio.h>
#include <curl/curl.h>
int main(void){
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl == NULL)
return 0;
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/getAccessAttributes?id=1");
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "Error: %s\n", curl_easy_strerror(res));
return 0;
}
curl_easy_cleanup(curl);
return 0;
}
如果你从动态链接库中收集它一切正常:
gcc test.c -lcurl -o test
现在我想提出一个静态程序:
gcc test.c /tmp/curl/lib/libcurl.a -static -lcurl -lssl -lcrypto -ldl -lm -lz -DCURL_STATICLIB -I/tmp/curl/include -o test
他犯了错误:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libcrypto.a(dso_dlfcn.o): In function
dlfcn_globallookup':
Curl_parsenetrc': netrc.c:(.text+0x3c8): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /tmp/curl/lib/libcurl.a(libcurl_la-curl_addrinfo.o): In function `Curl_getaddrinfo_ex': curl_addrinfo.c:(.text+0x60): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
(.text+0x11): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/tmp/curl/lib/libcurl.a(libcurl_la-netrc.o): In function
该程序仅在您指定主机 IP 地址而不是 example.com 时才有效。否则程序无法解析域名:
$ ./test
Error: Couldn't resolve host name
如何解决名称解析问题?谢谢!
附言静态libcurl我收集了如下方法:
wget http://curl.haxx.se/download/curl-7.44.0.tar.lzma
tar xf curl-7.44.0.tar.lzma
cd curl-7.44.0
./configure --disable-shared --enable-static --prefix=/tmp/curl --disable-ldap --disable-sspi --without-librtmp --disable-ftp --disable-file --disable-dict --disable-telnet --disable-tftp --disable-rtsp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-smb --without-libidn
make && make install
最佳答案
这是动态 libcurl 的样子。
$ ldd test
linux-vdso.so.1 (0x00007ffcca3aa000)
libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x00007f5536ed6000)
libc.so.6 => /lib64/libc.so.6 (0x00007f5536b3e000)
libssl.so.1.0.0 => /usr/lib64/libssl.so.1.0.0 (0x00007f55368d3000)
libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x00007f5536503000)
libz.so.1 => /lib64/libz.so.1 (0x00007f55362ed000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5537138000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f55360e9000)
如果只想静态链接 curl,请不要使用 -static。只需将 libcurl.a 添加为目标文件之一或使用 -lcurl,您无需指定它两次。之后
gcc test.c curl-7.44.0/lib/.libs/libcurl.a -lssl -lcrypto -ldl -lm -lz -DCURL_STATICLIB -o test
你会得到
$ ldd test
linux-vdso.so.1 (0x00007ffd9a0a7000)
libssl.so.1.0.0 => /usr/lib64/libssl.so.1.0.0 (0x00007f947cc7e000)
libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x00007f947c8ae000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f947c6aa000)
libm.so.6 => /lib64/libm.so.6 (0x00007f947c3b1000)
libz.so.1 => /lib64/libz.so.1 (0x00007f947c19b000)
libc.so.6 => /lib64/libc.so.6 (0x00007f947be03000)
/lib64/ld-linux-x86-64.so.2 (0x00007f947cee9000)
-static 表示您希望所有静态链接。然后您需要将所有库准备为静态,结果将是:
$ ldd test
not a dynamic executable
关于c - 如何使用静态 libcurl 编译程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32102613/
我构建了 nss 的 64 位版本,并尝试使用它来使用 --without-ssl 和 --with-nss=NSS_ROOT 选项构建curl 库。 在配置阶段,我看到以下内容: checking
我访问了 4 页。每个页面设置cookies。我如何向 libcurl 询问所有 cookie 或特定 cookie(如“session_id”)的值? 最佳答案 curl_easy_getinfo
我正在使用 libcurl 开发一个 c 程序。 当我构建我的程序时,我可以使用不同版本的 libcurl。 当我从版本更改为其他(libcurl)时,我必须更改源代码中的一些 block 以使其适应
我需要使用“Content-Type: application/json”进行 HTTP DELETE 调用。我如何使用 libcurl 接口(interface)来做到这一点。 最佳答案 我认为在
我通常是一名 Java 开发人员,但我现在正在编写一个 C++ 库,他们将使用 LibCurl。而且我对 C++ 世界一无所知! 我正在写的实际上是供其他开发人员使用的库(它是用于访问我们的 API
我刚刚注意到当我使用 IP 进行 HTTPS 调用时,libcurl 没有设置 SNI 字段。我发现了这个: https://github.com/curl/curl/blame/master/lib
我正在开发 Linux 嵌入式应用程序,它充当客户端并使用 libCurl 从 https 服务器接收数据。我的应用程序的要求是接受过期的证书并继续建立连接。 我找不到任何可以使用 curl_easy
我正在尝试在 OS X 10.11(目标 10.8)上构建启用 SSL 的静态 libcurl.a: export MACOSX_DEPLOYMENT_TARGET="10.8" ./configur
我正在尝试执行rake db:create命令。我收到以下错误 无法打开库'libcurl':libcurl:无法打开共享对象文件:无此类文件或目录。 Could not open library '
我之前问过一个关于 libcurl 的问题。我已经设法自己找到了答案,并且很乐意分享我是如何解决这个问题的,只要我确定它有效。事情是这样的,在此之前,当我尝试编译时链接器会出错,经过一些搜索和反复试验
我已经使用以下配置标志成功地在系统和非 root 用户上安装了 libcurl: ./configure --prefix=/path/to/lib --exec-prefix=/path/to/li
我一直在尝试通过将 libcurl.a 添加到我的 Xcode 7.2 项目来消除对 libcurl.4.dylib 的任何依赖。我构建了一个全新的 libcurl 并将其放在/usr/local/l
我试图在 CentOS6 上安装 R 3.3.2。但不知何故我无法使 libcurl 支持 https。 Here有人建议安装 libcurl:libcurl-devel (rpm) 或 libcur
我试图 curl 到我的本地主机 laravel 站点。我正在使用 XAMPP 7.1 当我尝试重新连接此代码时,总是会出现错误(而不是 200 OK 响应) Fatal error: Uncaugh
在我的开发过程中,我的代码运行正常。当我推送到我的服务器时,它变成了错误。 cURL 错误 6:无法解析主机:http(请参阅 http://curl.haxx.se/libcurl/c/libcur
GuzzleHttp\Exception\RequestException cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书(请参阅 https://curl.haxx.se/libcu
我遇到了这个错误 cURL error 3: malformed (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)将多个模型保存/创建到
如何强制libcurl通过ipv4或ipv6访问以双堆栈模式运行的服务器?使用IP地址应该不难,但是我正在寻找可以与DNS配合使用的东西... 最佳答案 你打赌可以将config CURLOPT_IP
我正在使用 libcurl 从 url 下载文件。文件的原始大小是 1700k,但我只得到 1200k。在我用数据包嗅探器检查后,我意识到数据是以分块编码和 gzip 格式传入的。此外,我的进度回调始
我正在为我的一个项目使用 libcurl。我知道 curl 不用于发出多个并发请求,但 libcurl 是否支持它? 我知道还有其他工具,例如 ab,但 libcurl 提供了很多功能。我再次知道我可
我是一名优秀的程序员,十分优秀!