【问题标题】:MATLAB loadlibrary error: Undefined symbol: _intel_fast_memmoveMATLAB loadlibrary 错误:未定义符号:_intel_fast_memmove
【发布时间】:2018-10-03 21:48:07
【问题描述】:

我正在尝试将第 3 方库(.so 文件)加载到 RHEL 下的 MATLAB 中。

我收到一个错误:未定义:符号:_intel_fast_memmove。

Symbol lookup error: _FileName_: undefined symbol: _intel_fast_memmove 看来,我需要将 /opt/intel 的子目录添加到我的 LD_LIBRARY_PATH 环境变量中,但我没有 /opt/intel 目录。

更新:

MATLAB 表示尝试加载 libifcoremt.so.5 时出现问题。我已经安装了Intel's Redistributable Libraries,所做的只是调用英特尔的libifcoremt.so.5 版本,但仍然在寻找_intel_fast_memmove(但仍然没有找到)。所以现在我在想,一定有一些其他的“定义”文件在我丢失的地方。

【问题讨论】:

  • 第 3 方忘记为运行时库提供 .so 文件。你需要问他们。
  • 是的......不幸的是,这是一个“旧”包,所以我无权访问第三方开发人员。这不是我遇到的第一个障碍,因为开发人员的 linux 配置与我不同,这会产生“隐藏”依赖项。
  • 从 Linux 命令行尝试 ldd <libraryname>。它应该向您显示该库需要链接到哪些库,以及是否找到它们。希望从那里您将能够确定您需要哪个版本的英特尔运行时库。然后,您也许可以从英特尔网站下载这些运行时。抱歉,这不是我可以远程帮助的事情...... :)
  • 谢谢,@cris。如果您查看我的更新,我认为您会同意这与丢失 .so 文件无关。我之前查看了ldd,并没有缺少任何依赖项。
  • 另一个选项是符号与 MATLAB 加载的其他库发生冲突。也许 MATLAB 也使用相同的英特尔库,但版本不同。然后,当它加载您的 .so 文件时,它不会尝试加载英特尔库,因为它已经拥有它,但是由于它是不同的版本,所以缺少一个符号。我以前见过这样的事情。我总是尝试使用静态链接为 MATLAB 构建东西,以避免这种类型的问题。

标签: matlab intel rhel loadlibrary


【解决方案1】:

我花了几天的时间,但我能够弄清楚发生了什么。

最后有两个问题:

  1. 我错过了一些库——不是我在问题中提到的那些,而是Intel's Redistributable Libraries

  2. 即使我的计算机上有所有库,MATLAB 仍在使用某些 .os 文件的旧版本。

    我没有在我的问题中提到,虽然 3rd-party 库是相当新的,但我是从 MATLAB 2012B 调用它,因为我需要将它与不起作用的软件包集成正确使用更高版本的 MATLAB。我为这个遗漏道歉——事实证明它是这个难题的关键部分。

    在诊断此问题时,我了解到 MATLAB 在 <MATLAB>/sys/os/glnxa64 子目录中拥有自己的英特尔库副本并且它创建了一个指向其的 LD_LIBRARY_PATH 的内部版本它从 Linux 操作系统导入的 LD_LIBRARY_PATH 之前的内部版本。由于我使用的MATLAB版本是6年的,所以它是Intel库,它不包含新库中定义的一些符号,例如intel_fast_memmove

为了让集成系统启动并运行,我制定了一种解决方法,在调用第 3 方库之前重命名 sys/os/glnxa64,以便 MATLAB 找到更新的 Intel 库而不是 MATLAB 2012B 版本。然后在完成后将其重新命名(没有该目录,MATLAB 将无法启动)。

注意:我首先尝试在 MATLAB 2012B 中编辑 LD_LIBRARY_PATH 的值以更喜欢新的 Intel 库,但发现即使外部变量值发生了变化,loadlibrary 仍然使用最初放置 MATLAB 库的原始值路径。

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 2013-06-01
    • 2012-10-10
    • 2013-10-22
    • 2014-06-01
    • 2015-11-13
    • 1970-01-01
    相关资源
    最近更新 更多