在C ++中使用XGBoost时的未定义符号

问题描述

我想在我的XGBoost项目中包含C++库。这是我遵循的步骤:

  1. 使用git从GitHub下载。
  2. 使用make -j4编译XGBoost文件
  3. 在XCode中,我将XGBoost路径添加到路径搜索中:

    search-paths

  4. 在我的项目中,当我过去包含它时,可以找到XGBoost文件。 但是,当我执行代码时,以下是错误消息:

    enter image description here

它说在c_api.h中带有函数名的未定义符号
有人知道如何解决这个问题吗? 如果我想在Linux中编译这些文件,则应该包括哪个命令以便链接XGBoost库。非常感谢您的帮助!

解决方法

您设置了DYLD_LIBRARY_PATH吗?

如果要在Linux上编译。说您在家里做了以下事情:

git clone --recursive https://github.com/dmlc/xgboost
cd xgboost
mkdir build
cd build
cmake ..
make -j4

您包含的路径是:

-I ~/xgboost/include/xgboost

该库将libxgboost.so存在于〜/ xgboost / lib
为了与该库链接,您必须添加:

-L ~/xgboost/lib -lxgboost

由于它是共享库(.so),因此您必须修改LD_LIBRARY_PATH并将其导出。

export LD_LIBRARY_PATH=~/xgboost/lib:$LD_LIBRARY_PATH

ps:如果您不想修改LD_LIBRARY_PATH,另一种解决方案是添加

-Wl,-rpath=~/xgboost/lib
,

在导航器中的构建设置下选择项目,

  • 将“其他链接器标志”(OTHER_LDFLAGS)设置为等效于"-L<path> -<flag>"。例如,对于{fmt},它将是-L/usr/local/Cellar/fmt/7.0.1/lib -lfmt

    使用pkg-config --libs <libname>进行查找。

  • 如果lib文件不在路径中,请将“库搜索路径”(LIBRARY_SEARCH_PATHS)设置为库的父目录。

https://help.apple.com/xcode/mac/current/#/itcaec37c2a6