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

如何解决在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?