簡體   English   中英

如何將 libcurl 鏈接到 linux 中的 c++ 程序?

[英]How do I link libcurl to my c++ program in linux?

我需要在我的 ubuntu 機器上編寫的軟件中使用 libcurl。 我正在使用 Eclipse 編寫和編譯所有軟件。 當我將 libcurl 文件與.cpp 文件放在同一文件夾中,並在 header 中包含 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

我從 libcurl 中獲取了 include 文件夾的內容,並將它們放在與 .cpp 文件相同的文件夾中。 然后在.cpp文件的header中,我輸入:

#include <curl/curl.h>

我也試過:

#include "curl/curl.h"

關於這個問題的任何想法? 謝謝。

您的 header 文件包含就好了; 您的問題發生在鏈接步驟。 為了鏈接 libcurl,您需要添加-lcurl命令行選項,假設它安裝在標准目錄中:

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

如果它沒有安裝在標准目錄中,您還需要添加-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

另請注意, -lcurl選項必須出現您要鏈接的 object 文件列表之后,否則將無法正確鏈接。

您可以嘗試使用curl-config --libs

另一個答案(第一個很好)。 考慮使用“pkg-config --libs libcurl”返回的 output 作為編譯器的參數。

例如,

CPPFLAGS=`pkg-config --libs libcurl`

g++ $CPPFLAGS myfile.o

Pkg-config 是開源庫與您交流如何鏈接它們/#include 它們的文件的標准方式。

任何使用 ecplise CDT 的人都需要進行以下操作。 首先在終端輸入

curl-config --libs

在我的機器上,結果是

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

然后按照這個截圖做,你就可以編譯了。 順便說一句,不要忘記在您的代碼中添加 header 文件

在此處輸入圖像描述

因此,您輸入不帶 -L 的庫文件夾路徑和不帶 -l 的庫名稱,因為它們將由 linker 自動添加。

您必須將庫鏈接到您的程序。 使用 gcc (和大多數其他編譯器),您可以指定要與-lname_wo_lib鏈接的庫,例如-lcurl

另請參閱GNU GCC 手冊 - 鏈接選項以詳細解釋 Adam Rosenfield 所說的選項。 對於標准搜索目錄,請參閱GCC 簡介 - 對於 GNU 編譯器 gcc 和 g++ - 設置搜索路徑

除了第一個答案,我還必須鏈接 curlpp 庫。 因此,要編譯包含 curlpp 的 main.cpp 文件,我必須這樣做:

g++ main.cpp -lcurl -lcurlpp

僅使用兩個鏈接之一將返回有關不同鏈接的不同錯誤。 重要的是要提醒這只是因為我已經在標准包含文件夾中安裝了所有必要的庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM