我交叉编译了一个在 Debian Stretch 上运行的可执行文件,它需要特定版本的 cURL(大于 7.56)才能运行,并且在执行过程中需要特定的功能。因此,我将在可执行文件上运行:
$ sudo setcap cap_net_raw,cap_net_admin+eip my_executable
运行此 setcap 后,然后运行可执行文件,我最终会出现以下错误:
curl_easy_perform() failed: Out of memory
笔记此错误预计是由于早期版本的 CURL 存在错误所致。这就是为什么我们需要升级到上面的 cURL 版本7.56
。对于运行在 Raspberry Pi 上的情况,基本版本是7.52
,所以我的想法是,这指向旧版本的 cURL,尽管我已将系统中的 cURL 版本更新为最新版本手动释放:
$ curl --version
curl 7.64.1 (armv7l-unknown-linux-gnueabihf) libcurl/7.64.1 OpenSSL/1.1.0j
Release-Date: 2019-03-27
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS HTTPS-proxy IPv6 Largefile NTLM NTLM_WB SSL TLS-SRP UnixSockets
这里发生了什么?是否setcap
会导致可执行文件从标准usr/bin
和之外的某个地方动态链接库usr/local/bin
?