2016-06-23 50 views
1

我幾個星期以來一直在處理這個問題。我知道我可能只是錯過了我不知道的一小步。所以,任何見解都會受到高度讚賞。通過CMake添加外部庫(例如Eigen)

我想添加一些外部庫,並在我的C++項目中使用它們。但似乎無法弄清楚如何。我閱讀了所有關於添加外部庫的文章,但我相信我錯過了一些東西!

比方說,我想添加一個簡單的庫,如Eigen(一個只有標題的庫)。我複製並粘貼包含我項目中子文件夾中所有文件的文件夾。我打電話給子文件夾ThirdPartyLibraries。

INCLUDE_DIRECTORIES("${MAINFOLDER}/ThirdPartyLibraries/eigen") 

還有什麼我需要做的嗎?

現在,我們假設我想添加另一個庫,如XGBoost(同時包含頭文件和源文件)。它會如何不同?

我對XGBoost做了類似的事情。我的代碼可能沒有錯誤地構建,但只要我沒有引用庫中的任何函數(基本上只是將庫添加到我的項目而不使用它)。當我嘗試使用任何函數時,我會遇到有關「未解析的外部符號」的錯誤,這使我認爲在添加庫時錯過了某些東西。

我沒有添加任何庫到我的C++代碼。所以,如果你能保持簡單的解釋,那會很棒!

+1

'我得到了關於「未解析的外部符號」的錯誤,這使得我在添加庫時錯失了某些東西。「 - 您錯過了對[target_link_libraries]的調用(https://cmake.org/cmake/help/ V3.0 /命令/ target_link_libraries.html)。 – Tsyvarev

+0

謝謝。這就說得通了。我需要定位的文件是什麼?我無法找到任何.os或.dll文件。 –

+0

'我無法找到任何.os或.dll文件。「 - 因此,您需要爲其出現庫。 – Tsyvarev

回答

2

因此,我解決了這個問題,並認爲我爲其他可能遇到此問題的人分享瞭解決方案。

添加Eigen庫非常簡單,因爲它只是頭文件。您只需複製並粘貼項目目錄中的所有頭文件並使用include目錄。你應該罰款後。

關於XGBoost鏈接,他們只是添加該項目的cmake文件。所以,你需要做的是在Visual Studio中構建該項目。構建完成後,您將獲得.lib,.dll和.exe文件。你應該只需要.lib文件。複製和地方將它們粘貼到你的項目目錄,並將其鏈接到主項目是這樣的:

TARGET_LINK_LIBRARIES(ProjectName libxgboost) 

然後,你必須應付並粘貼包括目錄(包含頭文件)從xgboost目錄某處你的項目目錄。除了libxgboost,你還必須包含rabit和xgboost庫。所以,當你複製並粘貼libxgboost.lib並使用'target_link_directories'鏈接它們時,只需複製並粘貼它們。

當您使用庫中的任何函數時,請確保包含頭文件。

希望這可以幫助其他人很難得到它的工作。

+0

我想在Linux上使用xgboost。沒有Visual Studio有沒有辦法?如何安裝庫並使用它? –

+0

你應該參考Linux的文檔。我正在使用Windows,因此我沒有檢查Linux配置。但是Linux實際上可能更直接。 –

+0

我很抱歉。我的意思是「我想在Windows上使用xgboost」 –