【问题标题】:Missing function definitions with libcurl-devel on CentOS 6.6CentOS 6.6 上缺少 libcurl-devel 的函数定义
【发布时间】:2015-12-23 05:44:47
【问题描述】:

我在编译使用 libcurl 的程序时遇到问题。

我使用的环境是 VM 上的 CentOS 6.6,我收到的错误表明该库有:

  1. 未正确安装或
  2. 找不到。

我做了一个

  • sudo yum install libcurl 后跟一个
  • sudo yum install libcurl-devel 后跟一个
  • sudo yum update

似乎curl.h 已放在/usr/include/curl 下,这似乎是正确的,所以我不确定为什么会发生这种情况。

值得注意的是,一个带有#include <curl/curl.h>的测试程序正在编译中。

另外,当没有安装 libcurl-devel 时(只有 libcurl 安装了),

  • gcc 抱怨找不到curl.h,不出所料,
  • 正如预期的那样,/usr/include/ 下也没有 curl 目录,
  • 然而 libcurl 确实如预期的那样在/usr/bin/ 下安装了一个 curl 文件。

在 Ubuntu 中我只需要安装 libcurl-openssl

一些示例 gcc 错误:

$gcc new.c -lcurl
new.c: In function ‘main’:
new.c:74: error: ‘CURLOPT_MAIL_FROM’ undeclared (first use in this function)
new.c:74: error: (Each undeclared identifier is reported only once
new.c:74: error: for each function it appears in.)
new.c:81: error: ‘CURLOPT_MAIL_RCPT’ undeclared (first use in this function)

【问题讨论】:

  • 您的程序中是否包含curl.h
  • 如果是,检查 curl.h 是否真的包含 CURLOPT_MAIL_FROMCURLOPT_MAIL_RCPT。如果不是,您可能只是使用了错误的 curl 版本。
  • 我做了#include <curl/curl.h>
  • 似乎这些在 curl.h 中不存在 - 我不认为您可以建议正确的版本?如前所述,我在 ubuntu 中使用 libcurl-openssl
  • 或许你可以尝试执行apt-get show libcurl-openssl在运行框上找到正确的版本

标签: c++ c linux gcc curl


【解决方案1】:

如果您是从 CentOS RPM 安装 libcurl-devel,那么绝对不应该将标头或其他任何内容放在 /usr/local/curl 中。 /usr/local 用于本地构建的组件,不适用于操作系统提供的组件。这究竟意味着什么可能会成为争论的话题,但我可以确认 CentOS 6 RPM 的 libcurl-devel 安装了 /usr/include/curl 中的标头。

在这种情况下,如果安装了 CentOS 的 libcurl-devel,那么您应该不需要任何特殊的编译器标志来让编译器解析

#include <curl/curl.h>

正确,但是如果您碰巧在系统上的某个位置有不同的curl.h,那么您可以改为选择它。尽管如此,尽管我可能相信编译器会自动找到/usr/local/include/curl/curl.h(也就是说,没有-I/usr/local/include),但听到它自动找到/usr/local/curl/curl.h,我会感到非常惊讶。

但这可能不是你的问题。 CentOS 6 提供了 7.19 版本的 libcurl。该版本不提供您尝试使用的宏,至少在 libcurl-devel 中不提供。我已经检查了与 Ubuntu 的 libcurl-openssl 对应的可能的附加包,但没有名称中同时包含“curl”和“ssl”的 CentOS 6 包(或 EPEL/el6 包)。

如果您可以确定所需的 libcurl 的最低版本,您可能可以自己构建它。在这种情况下,我更喜欢从Fedora's Koji system 获取源 RPM,在本地系统上从它构建 RPM,然后安装它们(可能在此过程中更新现有的 RPM)。或者,您可以构建和使用私有副本,但在这种情况下,您需要将其静态链接到您的程序中。

【讨论】:

  • 在 centos 中使用 SMTP 发送电子邮件除了 curl 之外,还有其他选择吗?
  • @WilliamPaul,我添加了一些关于如何获得所需版本的 libcurl 的 cmets。
  • 不管怎样,Curl 似乎最初在 7.20 版中添加了 SMTP 支持,尽管更改日志记录了自初始版本以来的许多错误修复和增强功能。
  • 我找到了替代解决方案,谢谢您的帮助
  • 我不知道任何 Ubuntu 资源可能如何对应。
猜你喜欢
  • 2013-01-28
  • 2017-09-30
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多