简体   繁体   English

为什么在尝试编译示例代码时出现错误“找不到-lcurl”?

[英]Why do I get the error “cannot find -lcurl” when trying to compile example code?

I'm trying to follow this curl example and get it to compile: 我正在尝试遵循以下curl示例并进行编译:

https://github.com/curl/curl/blob/master/docs/examples/smtp-mail.c https://github.com/curl/curl/blob/master/docs/examples/smtp-mail.c

https://github.com/curl/curl/blob/master/docs/examples/Makefile.example https://github.com/curl/curl/blob/master/docs/examples/Makefile.example

And what I have so far is borderline copy/pasted, but I keep getting an error "cannot find -lcurl" 到目前为止,我的工作是边界复制/粘贴,但是我不断收到错误消息“找不到-lcurl”

This is what I have for the code: 这就是我的代码:

#include <stdio.h>
#include <string.h>
#include "curl-7.64.0/include/curl/curl.h"

/*
 * For an SMTP example using the multi interface please see smtp-multi.c.
 */ 

/* The libcurl options want plain addresses, the viewable headers in the mail
 * can very well get a full name as well.
 */ 
#define FROM_ADDR    "<sender@example.org>"
#define TO_ADDR      "<addressee@example.net>"
#define CC_ADDR      "<info@example.org>"

#define FROM_MAIL "Sender Person " FROM_ADDR
#define TO_MAIL   "A Receiver " TO_ADDR
#define CC_MAIL   "John CC Smith " CC_ADDR

static const char *payload_text[] = {
  "Date: Mon, 29 Nov 2010 21:54:29 +1100\r\n",
  "To: " TO_MAIL "\r\n",
  "From: " FROM_MAIL "\r\n",
  "Cc: " CC_MAIL "\r\n",
  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
  "rfcpedant.example.org>\r\n",
  "Subject: SMTP example message\r\n",
  "\r\n", /* empty line to divide headers from body, see RFC5322 */ 
  "The body of the message starts here.\r\n",
  "\r\n",
  "It could be a lot of lines, could be MIME encoded, whatever.\r\n",
  "Check RFC5322.\r\n",
  NULL
};

struct upload_status {
  int lines_read;
};

static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp)
{
  struct upload_status *upload_ctx = (struct upload_status *)userp;
  const char *data;

  if((size == 0) || (nmemb == 0) || ((size*nmemb) < 1)) {
    return 0;
  }

  data = payload_text[upload_ctx->lines_read];

  if(data) {
    size_t len = strlen(data);
    memcpy(ptr, data, len);
    upload_ctx->lines_read++;

    return len;
  }

  return 0;
}

int main(void)
{
  CURL *curl;
  CURLcode res = CURLE_OK;
  struct curl_slist *recipients = NULL;
  struct upload_status upload_ctx;

  upload_ctx.lines_read = 0;

  curl = curl_easy_init();
  if(curl) {
    /* This is the URL for your mailserver */ 
    curl_easy_setopt(curl, CURLOPT_URL, "smtp://mail.example.com");

    /* Note that this option isn't strictly required, omitting it will result
     * in libcurl sending the MAIL FROM command with empty sender data. All
     * autoresponses should have an empty reverse-path, and should be directed
     * to the address in the reverse-path which triggered them. Otherwise,
     * they could cause an endless loop. See RFC 5321 Section 4.5.5 for more
     * details.
     */ 
    curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM_ADDR);

    /* Add two recipients, in this particular case they correspond to the
     * To: and Cc: addressees in the header, but they could be any kind of
     * recipient. */ 
    recipients = curl_slist_append(recipients, TO_ADDR);
    recipients = curl_slist_append(recipients, CC_ADDR);
    curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);

    /* We're using a callback function to specify the payload (the headers and
     * body of the message). You could just use the CURLOPT_READDATA option to
     * specify a FILE pointer to read from. */ 
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
    curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

    /* Send the message */ 
    res = curl_easy_perform(curl);

    /* Check for errors */ 
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));

    /* Free the list of recipients */ 
    curl_slist_free_all(recipients);

    /* curl won't send the QUIT command until you call cleanup, so you should
     * be able to re-use this connection for additional messages (setting
     * CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and calling
     * curl_easy_perform() again. It may not be a good idea to keep the
     * connection open for a very long time though (more than a few minutes
     * may result in the server timing out the connection), and you do want to
     * clean up in the end.
     */ 
    curl_easy_cleanup(curl);
  }

  return (int)res;
}

And this is what I'm using for the makefile: 这就是我用于makefile的内容:

TARGET = email
OBJS= smtp-mail.o
CC = gcc
CFLAGS = -c -g
LDFLAGS = -L/curl-7.64.0/lib
LIBS = -lcurl -lsocket -lnsl -lssl -lcrypto
$(TARGET) : $(OBJS)
    $(CC)  -o $(TARGET) $(OBJS) $(LDFLAGS) $(LIBS)

smtp-mail.o : smtp-mail.c
    $(CC) $(CFLAGS) $<

Does anyone know why this would be happening? 有谁知道为什么会这样?

EDIT: I updated the paths in smtp-mail.c and the makefile: 编辑:我更新了smtp-mail.c和makefile中的路径:

#include "/user/jastei/Email/curl-7.58.0/include/curl/curl.h"

LDFLAGS = -L/user/jastei/Email/curl-7.58.0/lib/ -L/user/jastei/Email/curl-7.58.0/lib/vtls

I ran the commands: 我运行了命令:

./configure --prefix=/user/jastei/Email/curl-7.58.0 --disable-shared

make

make install

At first, it looked like nothing has changed, however, instead of "cannot find -lcurl" I got this: cannot find -lsocket 乍一看,似乎一切都没有改变,但是,我得到的是“找不到-lsocket”,而不是“找不到-lcurl”

EDIT 2: Regarding cmake...when I called cmake: 编辑2:关于cmake ...当我叫cmake时:

/user/jastei/Email/cmake/bin/cmake CMakeLists.txt

I got this error: 我收到此错误:

File /user/jastei/Email/cmake/bin/headers/conf.h.in does not exist.

You are going to need to build libcurl yourself to get the static library that you want to compile with. 您将需要自己构建libcurl以获得要编译的静态库。 You can grab the latest release at https://github.com/curl/curl/releases/tag/curl-7_64_0 . 您可以在https://github.com/curl/curl/releases/tag/curl-7_64_0上获取最新版本。 Download the source code zip archive. 下载源代码zip存档。 You can view https://curl.haxx.se/docs/install.html for full building instructions but basically you need to extract the source code, open your terminal, cd to the directory that has the configure script and the Makefile , and then type the following commands: 您可以查看https://curl.haxx.se/docs/install.html以获得完整的构建说明,但是基本上您需要提取源代码,打开终端, cd到具有configure脚本和Makefile ,以及然后键入以下命令:

# change the below prefix path to where you want curl to install
# e.g. ~/curl-7.64.0
./configure --prefix=/path/to/install/to --disable-shared
make
make install

Let it work its magic. 让它发挥其魔力。 That should give you the files that you need. 应该给您您需要的文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 尝试从模拟返回值时,为什么会出现编译时错误? - Why do I get a compile-time error when trying to return values from a mock? 尝试编译XPCOM代码时为什么会出现错误C2440? - Why do I get error C2440 when I try to compile XPCOM code? 在GCC 4.9.2中编译以下代码时,为什么会出现错误? - Why do I get an error when I compile the following code in GCC 4.9.2? 为什么在尝试将我的代码上传到我的 Arduino 时会收到验证错误? - Why do I get a verification error when trying to upload my code to my Arduino? 为什么在尝试输出字符串时出现此错误? - Why do I get this error when trying to output a string? 为什么在尝试使用 MSVC 编译 32 位代码时出现错误? - Why am I getting an error when trying to compile 32-bit code with MSVC? 我试图在C ++中编码递归斐波那契序列,但是当我编译时遇到错误 - Im trying to code the recursive fibonacci sequence in c++ but when I compile I get an error ld.exe找不到-lcurl - ld.exe cannot find -lcurl 为什么在向量上使用 std::find() 时会出错? - Why do I get an error when using std::find() on a vector? 在jgrasp中编译C ++程序时,为什么会出现此错误? - Why do I get this error when I compile a C++ program in jgrasp?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM