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
然后按照这个截图做,你就可以编译了。别忘了在代码中添加头文件。
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
然后按照这个截图做,你就可以编译了。别忘了在代码中添加头文件。
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++设置搜索路径。