【问题标题】:Packaging .m libraries into MATLAB executables将 .m 库打包到 MATLAB 可执行文件中
【发布时间】:2013-10-17 03:03:22
【问题描述】:

我觉得这是一个比较基本的问题,但解决方案似乎超出了我的谷歌范围。

设置:

我在 ~/project 中有一个 matlab 项目,它引用文件夹 /s/cplex/matlab 中的一个 matlab 库 (cplex)。我可以通过调用 addpath('/s/cplex/matlab') 然后运行我的 main() 脚本来成功编译我的应用程序。

目标:

我想将我的项目构建为可执行文件,以便它仍然可以引用 /s/cplex/matlab。理想情况下,/s/cplex/matlab 将被打包到这个可执行文件中,以便它是可移植的。

问题:

我做这项工作的尝试都是徒劳的。我仔细研究了http://blogs.mathworks.com/loren/2008/08/11/path-management-in-deployed-applications/ 并尝试过:

  1. 在运行可执行文件之前将 /s/cplex/cplex/matlab 添加到 LD_LIBRARY_PATH
  2. 在启动 MATLAB 之前将 /s/cplex/cplex/matlab 添加到 LD_LIBRARY_PATH,使其位于 MATLAB LD_LIBRARY_PATH 上
  3. 将 /s/cplex/cplex/matlab 添加到 MATLAB 部署工具中的 Shared Resources and Helper Files 面板
  4. 编译前通过 addpath() 将 /s/cplex/cplex/matlab 添加到 MATLAB 路径
  5. 将 /s/cplex/cplex/matlab 添加到 MATLAB 部署工具的 Package 面板中

通过所有这些尝试,生成的可执行文件仍然无法找到 cplex 目录。将 matlab 可执行文件链接/打包到其 .m 依赖项的最佳方法是什么?

【问题讨论】:

  • /s/cplex/matlab 中有哪些文件,怎么称呼?
  • /s/cplex/matlab 包含 cplex 的 matlab 包装文件(位于 /s/cplex/bin 中)。我首先调用 Cplex('bilp'),然后使用此处描述的 API 解决 LP 问题:pic.dhe.ibm.com/infocenter/cosinfoc/v12r2/…
  • 您是否遇到与找不到 cplex 库相关的错误? API 函数是否可以使用相对路径来定位库。 API 是否使用与库链接的 mex 文件?如果 API 编译到您的应用中,则相对路径将无法正常工作。
  • 是的。当我从 Matlab 中运行程序时(在调用 addpath('/s/cplex/matlab') 之后,它运行良好。但是当我在编译后运行可执行文件时,我收到错误 Undefined function 'Cplex' for input arguments of type 'char'。这个错误是在调用 API 的函数中,而不是来自 API 本身,所以我认为这意味着问题出在我的程序中没有找到 API,而不是在 API 中没有找到 mex 文件。真的,我的问题只是如何将一组不在主项目路径上的 .m 文件打包到部署的可执行文件中。
  • 要尝试两件事。在命令行 mcc 中,您可以包含 -C 选项以生成单独的 CTF 存档。您可以使用“解压缩”检查此文件并检查您的文件是否已打包。另一种选择是在运行 mcc 时手动添加 API 文件,以查看是否可以解决您的问题。理想情况下,编译器会自动拾取这些文件。

标签: linux matlab


【解决方案1】:

啊哈!修复。

问题

对于遇到类似问题的任何人来说,问题确实出在 @ 符号上。我使用的是 AFS 文件系统,它将文件路径中的 @sys 解析为机器/操作系统对。我的路径中有“@sys”字符串以保持其通用性,MATLAB 将其视为表示类文件夹的关键字并被误读。

解决方案

我用实际的文件夹名称替换了所有出现的“@sys”,MATLAB 正确解析了它们。请注意,此解决方案并非立即显而易见,因为我使用的路径是指向带有“@sys”字符串的完整路径的符号链接。

【讨论】:

    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多