2013-03-27 65 views
2

我沒有使用C++的經驗,只需要對C++應用程序做一個小的調整就可以執行HTTP請求來驗證用戶。在使用CMake的項目中鏈接捲曲

Curlpp是一種選擇,但包括庫時,我得到一個錯誤的建築:

Undefined symbols for architecture x86_64: 
    "curlpp::OptionBase::OptionBase(CURLoption)", referenced from: 
     app_idomsconnector::RTMPAppProtocolHandler::GetAuthPassword(std::string) in libidomsconnector.a(rtmpappprotocolhandler.cpp.o) 
     curlpp::OptionTrait<std::string, (CURLoption)10002>::clone() const in libidomsconnector.a(rtmpappprotocolhandler.cpp.o) 

據我瞭解,我需要添加/中的CMakeLists.txt文件鏈接庫。任何人都可以告訴我究竟需要添加什麼? (運行OSX 10.8)正如我所提到的,我沒有使用C++的經驗,因爲我大部分時間都在使用Java。

+0

你有沒有建立正確的庫? (64位) - 'x86_64體系結構的未定義符號' – Caribou 2013-03-27 11:47:30

+0

可能沒有,使用「port」安裝curl,但是會認爲是Mac的x86_64。我必須從頭開始構建它嗎? – 2013-03-27 11:53:27

+0

我不是Mac精通的,我只是強調curlpp錯誤,因爲你說你不習慣使用C++,有時候人們會錯過關鍵位。如果安裝正確,原因可能是庫路徑或名稱。對不起,我無法提供更多幫助。 – Caribou 2013-03-27 11:59:52

回答

7

據我所知,我需要在CMAKELists.txt文件中添加/鏈接庫。

正是你需要做的:)

在C++中,有兩種類型的文件時,包括圖書館到項目的內容:

  • 頭文件,其中聲明符號的名稱(如單詞列表)
  • 代碼所在的目標文件(如字典實際定義的字典)

(這是有點簡化,但這裏並不重要)

錯誤消息告訴你,你不提供對象文件給編譯器,所以它不知道什麼字(類和函數)你在你的項目中使用的意思。

如果你正在建設一個名爲 「MyExecutable」 的執行,你必須有一個像

add_executable(MyExecutable ...)

在你的CMakeLists.txt

線。

這一行後,嘗試添加

target_link_libraries(MyExecutable curlpp)

我你已經有了一個 「MyExecutable」 一target_link_libraries線,只需添加curlpp別人庫。

+0

好吧,那很簡單!萬分感謝,本來可以救我一天! – 2013-03-27 19:17:15

+0

嗨。在我的Mac OS上,我下載了curl,進入了它的主文件夾並運行了./configure,make和make install。一切似乎都正常工作。 現在,我需要將curl鏈接到我的項目。按照您的說法修改CMakeLists,但編譯器無法找到curl的標題。我甚至應該移動一些特定的文件在curl的文件夾(我編譯的地方)指定在我的項目中的位置?謝謝 – ubisum 2016-09-30 17:44:25