在CentOS 6.6上使用libcurl-devel缺少函数定义

时间:2015-09-25 11:40:36

标签: c++ c linux gcc curl

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

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

  1. 未正确安装或
  2. 无法找到。
  3. 我做了

    • 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)
    

1 个答案:

答案 0 :(得分:0)

如果你是从CentOS RPM安装libcurl-devel那么它绝对应该将标题或其他任何东西放在MyCompany/Net/MyModule.pm中。 /usr/local/curl适用于本地构建的组件,不适用于操作系统提供的组件。究竟是什么意思可以成为辩论的主题,但我可以确认libcurl-devel的CentOS 6 RPM在/usr/local中安装标题。

在这种情况下,如果安装了CentOS的/usr/include/curl,那么您不需要任何特殊的编译器标志来让编译器解析

libcurl-devel

正确,但如果您的系统上某处有#include <curl/curl.h> ,那么您可以选择它。尽管如此,虽然我可能认为编译器会自动找到curl.h(即没有/usr/local/include/curl/curl.h),但听到它自动找到-I/usr/local/include我会感到非常惊讶。

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

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