4

考虑这 4 个软件:

  1. 眼镜蛇 2.05

  2. LibSBML 5.10

  3. MATLAB R2013a(也称为 8.1,64 位;MATLAB 不再支持 32 位 Linux)

  4. 64 位 Linux 操作系统(例如 Ubuntu 14.04 或最新的 Mint,但不限于它们)

介绍

COBRA 工具箱是在 MATLAB 之上运行的优化套件,旨在开发用于代谢网络建模的 MATLAB 代码。这样的“网络”是一个方程组,可以有非常多的方程和变量(例如数千个)。因此,根据某种格式规范读取和写入这些大型模型的例程是必须具备的,而 COBRA 使用标准 SBML 来实现这一点。

问题

与 Windows 版本不同,Linux 二进制包不能很好地开箱即用地集成:首先,可供下载的预编译 Linux 二进制 libSBML(开源)不附带 MATLAB 支持。如果尝试使用预编译的 libSBML,COBRA 将找不到“MATLAB 绑定”,因此无法在 m 脚本中从磁盘读取和写入 SBML XML 文件。

问题

需要做什么才能使 COBRA 2.05 在 Linux(Ubuntu 14.04 或最新的 Mint,但这不太可能特定于发行版)下运行在 MATLAB R2013a 之上,能够读取和写入 SBML XML 文件?换句话说,需要在系统范围内做什么才能让 COBRA 通过自己的testSBML测试?

4

3 回答 3

1

这就是我让它工作的方式,以及我可以从关于我的 Linux 机器如何工作的所有麻烦中学到的东西。我希望我没有忘记/遗漏/误会任何事情。

1. MATLAB

1.1。安装 MATLAB

将它安装在它的默认位置(您将需要 root 访问权限),不要像我想的那样固执。为什么:

1.1.1。一体化

您很可能在某个时候想要安装一些使用 MATLAB 框架的其他软件,而在现实世界中,即使您知道如何告诉它在哪里寻找,软件也并不总是能找到其他软件。

1.1.2。让您的生活更轻松

尽管在一个有大量可用空间并且可以在多台机器上使用的地方安装一个大软件似乎是个好主意(特别是在 Linux 中,它没有被称为 Registry 的可憎之处,并且有符号链接),这可能只是一个好主意——除了项目1.1.1——如果那个地方是一个带有 Linux 文件系统的分区,因为在某些时候,一些可执行文件/脚本将需要执行权限,并通过执行安装整个分区对其所有文件的权限相当不安全。因此,不要将 MATLAB 放在外部 HD 的 NTFS 分区中;也许在外部 HD 中为特定于 Linux 的东西创建一个 Linux 分区可以解决这个问题,但这有多少麻烦?

1.2. 设置 MATLAB,以便人们和其他软件可以启动它

尽管我在某处看到 MATLAB 安装程序最终显示了一个选项,以便为方便起见在系统路径中创建符号链接,但在我的情况下并没有。但这没关系,因为无论如何我都必须用/usr/local/bin/matlab以下 shell 脚本(相同的路径,相同的文件名)替换符号链接:

    #!/bin/sh
    export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
    exec /usr/local/MATLAB/R2013a/bin/matlab $*

OBS:这LD_LIBRARY_PATH对于 MATLAB 以后查找 SBML 绑定并能够使用它们是必需的。此外,如果您安装了一些第三方求解器,例如 TOMLAB,您很可能需要在这个小启动器脚本中添加更多路径。OBS 2:在我的情况下,安装脚本没有自动创建任何启动器或快捷方式,但我发现了一个无图标和无扩展名的Matlab 8.01文件和一个 matlab 图标作为 png 文件,第一个.desktop文件是我的模板文件可以根据我的需要进行编辑并放入/usr/share/applications以便 Unity Dash 可以找到它。这个Matlab.desktop文件的内容是:

    [Desktop Entry]
    Type=Application
    Icon=/usr/local/MATLAB/R2013a/Matlab.png
    Name=Matlab 8.01
    Comment="Start Matlab 8.01"
    Exec=/usr/local/MATLAB/R2013a/bin/matlab -desktop
    Categories=Development;
    Name=Matlab 8.01
    GenericName=Matlab 8.01
    Comment="Start Matlab 8.01"

2.libSBML

2.1。安装 libSBML

libSBML 由特定于 Ubuntu(和 CentOS)的 deb 包提供,还提供了适用于多种 Windows 和 MacOSX 的版本(它们的主页:http ://sbml.org/Software/libSBML )。猜猜哪个平台的二进制文件没有使用 MATLAB 支持编译?当然,Linux。这意味着您将需要从源代码编译(因此 deb 包对您毫无用处)。编译:

2.1.1。安装依赖项

依赖项libxml2-dev(来自软件管理器或终端):

    sudo apt-get install libxml2-dev

2.1.2. 为自己节省一些未来的时间

通常,一个人会做configuremake然后make install。但不建议这样做,原因与安装任何不包含在一个非常小的包中的东西相同:您将失去对哪些文件去哪里的控制,并且需要保留源代码以便在需要时能够make uninstall运行稍后卸载它。因此,请安装checkinstall并使用它来替换 step make install,因为checkinstall它会为您的系统创建一个包,以后可以像任何常规打包软件(从软件管理器或终端)一样卸载或重新安装:

    sudo apt-get install checkinstall

2.1.3。配置编译过程

获取 LibSBML 源代码并将其解压缩到某个文件夹。从终端导航到该文件夹​​并配置编译:

    ./configure --with-matlab

OBS:使用该with-matlab标志,配置脚本将失败,它找不到文件名为matlab. 如果失败,则输出matlab找不到文件,但它执行的测试实际上既是为了文件的存在,也是为了它是否可执行。因此,如果文件在 NTFS 分区中,即使找到该文件,configure 也会失败,但会告诉您找不到该文件。您可以强制它/path/to/matlab/root通过传递来查找可执行文件(它将bin在该路径中查找文件夹,并在该bin文件夹中查找可执行文件):

    ./configure --with-matlab=/path/to/matlab/root

OBS:这会将 libSBML 安装在默认位置:/usr/local/lib. 同样,让它安装在其默认位置是一个好主意,但如果您需要更改它,您可以传递带有标志的路径:--prefix=/your/installation/path

OBS 2:您可能会问为什么 libSBML 需要找到并执行 matlab 以支持它进行编译:它需要稍后启动 MATLAB 来构建 MEX 文件(编译的 MATLAB 代码),所以我推测您将无法如果您的 MATLAB 没有生成 MEX 文件的编译器,则毕竟要安装 libSBML。

2.1.4。构建和安装 libSBML

    make
    checkinstall

非常重要的 OBS

I) checkinstall要求确认它即将创建的包的元数据。在我的情况下,该version字段的字符串默认为“Source”(不带引号),这导致checkinstall失败,因为dpkg(实际构建 deb 文件的系统工具)失败,抱怨版本号必须以,嗯,a数字。因此,请节省一些时间并确保version字段中的字符串以数字开头(即“5.10”,显然没有引号)

II) checkinstall询问您是否要从该make install命令将放在您的主文件夹中的未来包文件中排除,并说排除它们是个好主意。LibSBML 有一个test.xml文件,以后需要在$HOME文件夹中,否则它不会让您与 MATLAB 集成。即使它告诉您 atest.xml丢失了,它也不会告诉您该文件应该在哪里,或者该文件是否是库附带的文件。我只是注意到它,因为checkinstall之前找到了一个$HOME/test.xml参考(当然,我从包中排除了)并且我发现这很奇怪。所以,省点时间,$HOME/test.xml从生成的包中排除checkinstall,然后test.xml在source-code文件夹里面搜索,复制到$HOME一旦 libSBML 完成由checkinstall.

2.2. 将 libSBML 集成到 MATLAB

启动 MATLAB,导航到步骤2.1.5中安装 SBML MATLAB 绑定的位置(在我的情况下:)/usr/local/lib并运行installSBML.m应该存在的文件。

2.2.1。共享库问题

就我而言,由于一个未解决的老问题,我遇到了一个错误:libstdc++.so.6没有对GLIBCXX_3.4.15. 事实证明,MATLAB 正在尝试使用一个libstdc++.so.6.0.13(libstdc++.so.6是指向这个文件的符号链接) 附带它/usr/local/MATLAB/R2013a/sys/os/glnxa64,它确实没有那个引用(可以通过发出来验证:

    strings /usr/local/MATLAB/R2013a/sys/os/glnxa64/libstdc++.so.6.0.13 | grep GLIBC

)。我的系统有一个包含该引用的libstdc++.so.6.0.19位置/usr/lib/x86_64-linux-gnu,因此我通过正确设置(请参阅步骤1.2)强制 MATLAB 使用6.0.19一个,并将MATLAB 附带的重命名为其他名称,这样它就找不到它并继续寻找直到找到我的系统。我的一个运行 Linux Mint 的朋友不需要重命名任何东西:对他来说,设置就足够了。LD_LIBRARY_PATHlibstdc++.so.6LD_LIBRARY_PATH

2.2.2。其他问题

installSBML.m如果找不到$HOME/test.xml步骤2.1.5中提到的文件,则无论该库是否实际工作,都会失败。它假定如果它无法使用它假定位于的文件来测试自己$HOME,那么用户无论如何都不应该选择安装它。

3. COBRA / SBML 工具箱

3.1。设置眼镜蛇

在 MATLAB 中,导航到<YOUR_COBRA_ROOT_FOLDER_HERE>/external/toolboxes/SBMLToolbox-4.1.0/toolbox该文件并在那里运行该文件install.m。您应该已完成所有设置,以便它找到您在步骤2.2中设置的 MATLAB 绑定。

3.2. MATLAB 设置路径问题

我必须以根用户身份手动编辑文件/usr/local/MATLAB/R2013a/toolbox/local/pathdef.m以包含文件夹/usr/local/lib(libSBML 及其 MATLAB 绑定所在的位置)以使该设置持久化。每次我重新启动 MATLAB 时,它的 setpath 都会恢复到默认值,无论我在通过 MATLAB GUI 设置其 setpath 时是否以 root 身份启动 MATLAB。

3.3. 测试

现在,您希望已将所有点连接起来。试试看:在 MATLAB 中,导航到<YOUR_COBRA_ROOT_FOLDER_HERE>并发出:

    initCobraToolbox
    testAll

如果您没有安装和配置任何第三方求解器,它应该通过19项测试中的14项,包括 SBML 测试 ( )。现在您可以将 SBML 文件加载到 MATLAB 中并使用它们。testSBML

于 2014-05-19T13:04:44.053 回答
0

我还需要通过以下方式将 /usr/local/lib/libsbml.so.5 的符号链接添加到 MATLAB sys 文件夹:

sudo ln -s /usr/local/lib/libsbml.so.5 /usr/local/MATLAB/R2014a/sys/os/glnxa64/

这最终使安装成为可能。我使用 Cmake 安装。为此,需要在源包中找到 FindMatlab.cmake 并手动插入 MATLAB 路径!

.............
        elseif(EXISTS "/Applications/MATLAB_R2008a.app/")
                set(MATLAB_ROOT_PATH "/Applications/MATLAB_R2008a.app/")    
            endif()
        else()
            if (EXISTS "/usr/local/MATLAB/R2014a/")
                set(MATLAB_ROOT_PATH "/usr/local/MATLAB/R2014a/")
            endif()
        endif()
..........
于 2015-03-12T15:57:16.357 回答
0

仅供参考,要解决第2.2.1点的共享库问题,我需要安装软件包matlab-support(在 Ubuntu 存储库中)

于 2016-09-26T12:55:07.947 回答