如何将libcurl链接到linux中的c ++程序?

Aus*_*oon 28 c++ eclipse linux libcurl

我需要在我在ubuntu机器上编写的一个软件中使用libcurl.我正在使用Eclipse编写和编译所有软件.当我将libcurl文件放在与.cpp文件相同的文件夹中,并在标题中包含curl.h文件时,当我尝试编译程序时,它会出现以下错误:

Building target: sms
Invoking: GCC C++ Linker
g++  -o"sms"  ./src/sms.o   
./src/sms.o: In function `main':
/home/geekman/workspace/sms/Debug/../src/sms.cpp:38: undefined reference to `curl_easy_init'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:42: undefined reference to `curl_easy_setopt'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:44: undefined reference to `curl_easy_setopt'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:46: undefined reference to `curl_easy_perform'
/home/geekman/workspace/sms/Debug/../src/sms.cpp:47: undefined reference to `curl_easy_cleanup'
collect2: ld returned 1 exit status
make: *** [sms] Error 1
Run Code Online (Sandbox Code Playgroud)

我从libcurl中获取了include文件夹的内容,并将它们放在与.cpp文件相同的文件夹中.然后在.cpp文件的标题中,我键入:

#include <curl/curl.h>
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

#include "curl/curl.h"
Run Code Online (Sandbox Code Playgroud)

关于这个问题的任何想法?谢谢.

Ada*_*eld 53

你的头文件包含就好了; 你的问题发生在链接步骤.为了链接libcurl,您需要添加-lcurl命令行选项,假设它安装在标准目录中:

g++ -o sms ./src/sms.o -lcurl
Run Code Online (Sandbox Code Playgroud)

如果它没有安装在标准目录中,您还需要添加-L/path/to/libcurl,例如:

# Assuming that /home/geekman/workspace/libcurl is where libcurl.a is located
g++ -o sms ./src/sms.o -L/home/geekman/workspace/libcurl -lcurl
Run Code Online (Sandbox Code Playgroud)

另请注意,该-lcurl选项必须出现您要链接的目标文件列表之后,否则将无法正确链接.


小智 9

你可以尝试使用curl-config --libs.


Sam*_*Sam 5

另一个答案(第一个答案非常好)。考虑使用“pkg-config --libs libcurl”返回的输出作为编译器的参数。

例如,

CPPFLAGS=`pkg-config --libs libcurl`

g++ $CPPFLAGS myfile.o

Pkg-config 是开源库向您传达如何链接它们/#include 它们的文件的标准方式。