【问题标题】:Run C executable from Matlab从 Matlab 运行 C 可执行文件
【发布时间】:2013-03-17 21:29:23
【问题描述】:

我尝试在 Linux 上运行来自 matlab 的 Sift 特征描述符可执行文件的 C 实现。我运行的脚本和某个文件夹中的可执行文件和可执行文件由以下运行

./sift <tmp.pgm >tmp.key

我确实可以在 Matlab 上运行它,但它们都没有工作

eval('!./sift <tmp.pgm >tmp.key');
system('./sift <tmp.pgm >tmp.key');
unix('./sift <tmp.pgm >tmp.key');

我还从终端检查了可执行文件,它可以正常工作。有没有其他方法可以做到这一点或者我有什么小错误?

【问题讨论】:

  • 您收到什么错误消息或意外输出?尝试捕获返回状态和输出,例如[status,output] = system(...).
  • 没有任何错误,只有-1作为状态。

标签: c linux matlab executable


【解决方案1】:

你的语法看起来不错。

-1 状态意味着它可能根本无法找到或启动 sift。我知道这是基本的(我认为其他人提到过),但是您的 Matlab 程序是否从 sift 调用它时所在的同一目录运行? system() 函数评估相对于 Matlab 会话当前目录的路径,而不是调用脚本的位置。如果您的脚本出于其他原因调用了cd,则会对其产生影响。使用pwd 检查您的当前目录,并执行lsexist('./sift', 'file') 以确保它在那里。

如果是这种情况,您可以通过使用绝对路径调用 sift 使其更加健壮,可能在运行时使用脚本中的 fileparts(mfilename('fullpath')) 计算。

【讨论】:

  • 是的,我都在同一个路径上运行,并且确保在程序运行时我不会更改工作空间路径
  • 下一个最可能的问题可能是环境变量问题,例如路径或库加载路径,或者可能是 shell 配置问题,因为 Matlab 会影响这些问题。通过sift 为您工作的终端执行set &gt; from_shell.txt 来检查环境,然后从Matlab 执行system('set &gt;from_matlab.txt')diff 他们以查看Matlab 是否正在修改内容。
  • 我猜在我的 Matlab 上没有任何命令可以执行。我尝试了其他人,但没有响应,只有 -1 表示状态。
  • 那是……奇怪。它应该能够基本上运行你可以从 shell 运行的任何程序。也许是外壳配置问题?您可以检查MATLAB_SHELLSHELL 环境变量以确保它们指向正常的东西,并尝试!ps[a,b] = system('ps')[a,b] = system('ps -fEww') 以查看Matlab 为您提供的确切启动内容.而且,为了隔离一些变量并获得更好的控制,您可以尝试在 Matlab 中使用java.lang.Runtime.exec 运行相同的程序。
  • 有趣。 (在这种情况下,你会认为它会给你一个真正的错误信息或警告。)继续接受你的答案;您通过调试工作获得了 15 分。 :)
【解决方案2】:

我发现问题是路径/matlab/bin/glnxa64/matlab_helper 有权限问题。在我检查问题后,一切都开始正常工作了。

【讨论】:

    【解决方案3】:

    我遇到了同样的权限问题。只是添加解决方案供其他人查看,因为我很难找到解决方案。 打开终端并输入 cd \path_of_your_file 须藤 chmod -R 777 它会询问您的密码并允许运行该 exe。抱抱。。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2014-06-03
      • 2013-03-12
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多