当你使用libcurl时,报一系列如下的错:undefined reference to ‘curl_global_init’,undefined reference to ‘curl_global’
当我的项目中需要用到libcurl
这个库时,我已经在使用到这个库的源文件上include
了<curl/curl.h>,并且也在Makefile中去指定了该头文件搜索的路径,然后进行编译后还是报了以下的错误:
/src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::initcurl(): error: undefined reference to 'curl_global_init'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::closecurl(): error: undefined reference to 'curl_global_cleanup'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_easy_init'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_easy_setopt'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_easy_setopt'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_easy_setopt'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_slist_append'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_easy_setopt'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_easy_perform'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_easy_strerror'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_slist_free_all'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::requestHttp(std::string, std::string): error: undefined reference to 'curl_easy_cleanup'
./src/comm_method/httpcurl.o:httpcurl.cpp:function Httpcurl::~Httpcurl(): error: undefined reference to 'curl_global_cleanup'
我的Makefile
一开始是这样写的(一小部分内容):
#LDFLAGS是链接选项
LDFLAGS += -lzmq -lpthread -llog -lssl -lcrypto
$(GOAL): $(OBJS)
$(XCPP) $(CXXFLAGS) $(CFLAGS_MIPS_CPP) $(LDFLAGS) $(OBJS) -o $(GOAL) $(LIBS)
$(OBJS): %.o : %.cpp
$(XCPP) -c $(CXXFLAGS_H) $< -o $@
我的Makefile
里的链接选项并没有-lcurl
。根本原因就在这里了。-lcurl 是一个编译选项,用于在链接阶段将程序与 libcurl 库进行链接。使用 -lcurl 选项将程序与 libcurl 进行链接。
所以只需要在LDFLAGS
后面加上-lcurl
。即 LDFLAGS += -lzmq -lpthread -llog -lssl -lcrypto -lcurl。
这样就解决了!