我几周来一直在处理这个问题。我知道我可能只是错过了一个我不知道的小步骤。所以,任何见解都会受到高度赞赏。
我正在尝试添加一些外部库并在我的C ++项目中使用它们。但似乎无法弄清楚如何。我在互联网上阅读了关于添加外部库的所有帖子,但我相信我错过了一些东西!
让我们说,我想添加一个像Eigen这样的简单库(一个只有头的库)。我复制并粘贴了包含项目子文件夹中所有文件的文件夹。我调用了子文件夹ThirdPartyLibraries。
INCLUDE_DIRECTORIES("${MAINFOLDER}/ThirdPartyLibraries/eigen")
还有什么我需要做的吗?
现在,假设我要添加另一个类似XGBoost的库(包含头文件和源文件)。它会有什么不同?
我为XGBoost做了类似的事情。我的代码可以构建没有错误,但只要我没有引用库中的任何函数(基本上只是将库添加到我的项目而不使用它)。当我尝试使用任何函数时,我得到关于“未解析的外部符号”的错误,这让我觉得我在添加库时遗漏了一些东西。
我没有在我的C ++代码中添加任何库。所以,如果你能让解释变得简单,那就太好了!
答案 0 :(得分:2)
所以,我解决了这个问题,并认为我可以为其他任何可能遇到此问题的人分享解决方案。
添加Eigen库非常简单,因为它只是头文件。您只需将所有头文件复制并粘贴到项目目录中的某个位置,然后使用include目录。你应该没事。
关于XGBoost链接,他们只是添加了该项目的cmake文件。因此,您需要做的是在Visual Studio中构建该项目。构建之后,您将获得.lib,.dll和.exe文件。您应该只需要.lib文件。将它们复制并粘贴到项目目录中的某个位置,并将其链接到主项目,如下所示:
TARGET_LINK_LIBRARIES(ProjectName libxgboost)
然后,您必须处理并将xgboost目录中的include目录(包含头文件)粘贴到项目目录中的某个位置。除了libxgboost之外,你还必须包含rabit和xgboost库。因此,只需在复制并粘贴libxgboost.lib时复制并粘贴它们,并使用“target_link_directories”链接它们。
当您使用库中的任何功能时,请确保包含头文件。
希望这可以帮助那些很难让其工作的人。