【发布时间】: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/ 并尝试过:
- 在运行可执行文件之前将 /s/cplex/cplex/matlab 添加到 LD_LIBRARY_PATH
- 在启动 MATLAB 之前将 /s/cplex/cplex/matlab 添加到 LD_LIBRARY_PATH,使其位于 MATLAB LD_LIBRARY_PATH 上
- 将 /s/cplex/cplex/matlab 添加到 MATLAB 部署工具中的 Shared Resources and Helper Files 面板
- 编译前通过 addpath() 将 /s/cplex/cplex/matlab 添加到 MATLAB 路径
- 将 /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 文件,以查看是否可以解决您的问题。理想情况下,编译器会自动拾取这些文件。