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

时间:2022-10-31 18:46:20

I need to use libcurl in a piece of software I am writing on my ubuntu machine. I am using Eclipse to write and compile all of the software. When I put the libcurl files in the same folder as the .cpp file, and include the curl.h file in the header, When I attempt to compile the program, It comes up with these errors:

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

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

I took the contents of the include folder from libcurl, and placed them in the same folder as the .cpp file. then in the header of the .cpp file, I typed:

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

#include <curl/curl.h>

I also tried:

我也试过:

#include "curl/curl.h"

Any ideas on the problem? Thanks.

对这个问题有什么想法吗?谢谢。

6 个解决方案

#1


44  

Your header file inclusions are just fine; your problem is occurring at the linking step. In order to link against libcurl, you need to add the -lcurl command line option, assuming it's installed in a standard directory:

您的头文件包含的内容很好;您的问题出现在链接步骤中。为了链接到libcurl,您需要添加-lcurl命令行选项,假设它安装在一个标准目录中:

g++ -o sms ./src/sms.o -lcurl

If it's not installed in a standard directory, you also need to add the -L/path/to/libcurl, e.g. something like:

如果它没有安装在标准目录中,您还需要添加-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

Also note that the -lcurl option has to appear after the list of object files you're linking, otherwise it won't link properly.

还要注意,-lcurl选项必须在您链接的对象文件列表之后出现,否则它不会正确链接。

#2


9  

You can try to use curl-config --libs.

您可以尝试使用curl-config—libs。

#3


3  

An alternate answer (the first one is excellent). Consider using the output returned by "pkg-config --libs libcurl" as an argument to your compiler.

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

For example,

例如,

CPPFLAGS=`pkg-config --libs libcurl`

CPPFLAGS = ' pkg-config——libs libcurl '

g++ $CPPFLAGS myfile.o

g++美元CPPFLAGS myfile.o

Pkg-config is a standard way for open source libraries to communicate to you how to link against them / #include their files.

Pkg-config是开放源码库的一种标准方式,它可以告诉您如何链接到它们/ #包含它们的文件。

#4


1  

Anyone who is using ecplise CDT then you need to do following. First on terminal enter

任何使用ecplise CDT的人都需要遵守。首先在终端输入

curl-config --libs

On my machine, the result is

在我的机器上,结果是。

-L/usr/lib/i386-linux-gnu -lcurl

then do according to this screenshot and you will be able to compile. btw don't forget to add header files in your code

然后按照这个截图做,你就可以编译了。别忘了在代码中添加头文件。

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

So you enter library folder path without -L and library name without -l because they will be automatically added by linker.

因此,您可以在没有-L和库名称的情况下输入library文件夹路径,因为它们将被链接器自动添加。

#5


0  

You have to link the library to your program. With gcc (and most other compilers) you can specify the libs to link with -lname_wo_lib, e.g. -lcurl

你必须把图书馆和你的程序连接起来。对于gcc(和大多数其他编译器),您可以指定libs与-lname_wo_lib链接,例如-lcurl。

#6


0  

Also see GNU GCC Manual - Options for Linking for a detailed explanation of the options Adam Rosenfield said. For standard search directories, see An Introduction to GCC - for the GNU Compilers gcc and g++ - Setting Search Paths.

也请参阅GNU GCC手册-链接的详细解释的选项Adam Rosenfield说。对于标准搜索目录,请参阅GCC的介绍——为GNU编译器GCC和g++设置搜索路径。

#1


44  

Your header file inclusions are just fine; your problem is occurring at the linking step. In order to link against libcurl, you need to add the -lcurl command line option, assuming it's installed in a standard directory:

您的头文件包含的内容很好;您的问题出现在链接步骤中。为了链接到libcurl,您需要添加-lcurl命令行选项,假设它安装在一个标准目录中:

g++ -o sms ./src/sms.o -lcurl

If it's not installed in a standard directory, you also need to add the -L/path/to/libcurl, e.g. something like:

如果它没有安装在标准目录中,您还需要添加-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

Also note that the -lcurl option has to appear after the list of object files you're linking, otherwise it won't link properly.

还要注意,-lcurl选项必须在您链接的对象文件列表之后出现,否则它不会正确链接。

#2


9  

You can try to use curl-config --libs.

您可以尝试使用curl-config—libs。

#3


3  

An alternate answer (the first one is excellent). Consider using the output returned by "pkg-config --libs libcurl" as an argument to your compiler.

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

For example,

例如,

CPPFLAGS=`pkg-config --libs libcurl`

CPPFLAGS = ' pkg-config——libs libcurl '

g++ $CPPFLAGS myfile.o

g++美元CPPFLAGS myfile.o

Pkg-config is a standard way for open source libraries to communicate to you how to link against them / #include their files.

Pkg-config是开放源码库的一种标准方式,它可以告诉您如何链接到它们/ #包含它们的文件。

#4


1  

Anyone who is using ecplise CDT then you need to do following. First on terminal enter

任何使用ecplise CDT的人都需要遵守。首先在终端输入

curl-config --libs

On my machine, the result is

在我的机器上,结果是。

-L/usr/lib/i386-linux-gnu -lcurl

then do according to this screenshot and you will be able to compile. btw don't forget to add header files in your code

然后按照这个截图做,你就可以编译了。别忘了在代码中添加头文件。

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

So you enter library folder path without -L and library name without -l because they will be automatically added by linker.

因此,您可以在没有-L和库名称的情况下输入library文件夹路径,因为它们将被链接器自动添加。

#5


0  

You have to link the library to your program. With gcc (and most other compilers) you can specify the libs to link with -lname_wo_lib, e.g. -lcurl

你必须把图书馆和你的程序连接起来。对于gcc(和大多数其他编译器),您可以指定libs与-lname_wo_lib链接,例如-lcurl。

#6


0  

Also see GNU GCC Manual - Options for Linking for a detailed explanation of the options Adam Rosenfield said. For standard search directories, see An Introduction to GCC - for the GNU Compilers gcc and g++ - Setting Search Paths.

也请参阅GNU GCC手册-链接的详细解释的选项Adam Rosenfield说。对于标准搜索目录,请参阅GCC的介绍——为GNU编译器GCC和g++设置搜索路径。