2017-01-20 7 views
1

Ich verwende einen externen Löser, um Simulationen auszuführen. Ich versuche, den externen Löser mit System (cmd) von einem MATLAB-Skript zu nennen. Das Cmd selbst läuft gut, ohne Probleme vom Terminal (ich laufe auf OSX). Jedes Mal, wenn das MATLAB-Skript ausgeführt wird, lautet der Status jedoch 139 - Segmentationsfehler. Weiß jemand, warum das passieren könnte?MATLAB-Systembefehl gibt Segmentierungsfehler?

+1

Es ist wirklich unmöglich zu sagen. Es ist ein Problem mit Ihrem externen Programm, nicht MATLAB. Haben Sie Umgebungsvariablen, auf die das externe Programm angewiesen ist? – Suever

+0

Ja, es gibt bestimmte Umgebungsvariablen in meinem Home-Verzeichnis .bash_profile – jfherrm

+0

Richtig, also werden keine davon respektiert, wenn Sie einen 'system'-Befehl von MATLAB ausführen. Sie müssen 'setenv' verwenden, um die notwendigen Umgebungsvariablen zu setzen – Suever

Antwort

1

Bei der Ausführung system Befehl ist dies nicht das gleiche wie ein Programm aus dem Terminal laufen, da Sie wahrscheinlich Umgebungsvariablen in Ihrer Terminal-Sitzung (über ~/.bashrc oder ~/.bash_profile) definiert haben, die gehen zu bewirken, wie ein Programm zugegriffen wird und Renn.

Wenn Sie über Umgebungsvariablen verfügen, die für die erfolgreiche Ausführung des Programms festgelegt werden müssen, verwenden Sie in MATLAB setenv, bevor Sie system aufrufen.

0

Ich hatte das gleiche Problem mit meinem Matlab (R2016b), aber die Lösung war genau das Gegenteil.

Anstelle von Variablen, system() definiert LD_LIBRARY_PATH definiert, die zu einigen gemeinsam genutzten Bibliotheken mit Matlab umgeleitet, die nicht gut mit meinem Programm saß. Nach dem Löschen LD_LIBRARY_PATH in meinem Skript, alles hat gut funktioniert. Sie können das zum Beispiel damit tun:

env -u LD_LIBRARY_PATH