如何解决在C ++中使用XGBoost时的未定义符号
我想在我的XGBoost
项目中包含C++
库。这是我遵循的步骤:
- 使用git从
GitHub
下载。 - 使用make -j4编译
XGBoost
文件 - 在XCode中,我将XGBoost路径添加到路径搜索中:
- 在我的项目中,当我过去包含它时,可以找到
XGBoost
文件。 但是,当我执行代码时,以下是错误消息:
它说在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)设置为库的父目录。