Запишите исполняемый файл .sh файл с Java для OSX

С данным интерфейсом нет никакой пользы для компиляции с / clr вообще. Сделайте отладочный собственный код C ++, щелкнув правой кнопкой мыши основной проект C #> Свойства> вкладка Отладка> отметив флажок «Включить отладку собственного кода». Это включает как управляемые, так и неуправляемые механизмы отладки. Вы не можете пошагово перейти к собственному коду, для выполнения изменения механизма отладки требуется точка останова на функции Calc (). Вы все еще можете предпочесть модульный тест, написанный на нативном C ++, если установка точек останова неудобна.

Еще одна вещь, о которой вам нужно позаботиться, это то, что вы создаете код C ++ с включенными настройками Debug. Вы получили это сейчас, поэтому код кажется в два раза медленнее. Проводите тестирование только с настройками Release build, чтобы убедиться, что оптимизатор включен. Лучше всего включить собственный проект C ++ в решение C #, чтобы вы всегда создавали правильный вариант. И вы должны убедиться, что правильная DLL скопирована в каталог сборки основного проекта C #, обычно это делается с событием после сборки. Этот шаг копирования должен отличаться для конфигураций Debug и Release.

Обратите внимание, что объявления [DllImport] неверны. Тип возврата NewCalc () должен быть IntPtr, поэтому он также работает в 64-битном коде. Perf-тестирование 64-битной сборки кода C ++ - это то, что вы хотите попробовать, это может повысить производительность, если функция Calc () использует математику с плавающей запятой. На самом деле использование / clr может быть полезно для улучшения интерфейса, однако вы должны будете научиться писать код на C ++ / CLI и избегать сборки собственного кода C ++ с /clr.

8
задан Glenn 23 March 2009 в 15:06
поделиться

4 ответа

Вам был бы нужен к chmod он, и можно, вероятно, сделать это exec'ing системная команда как такой:

Действительно все, в чем Вы нуждались бы, должно исчерпать что-то вроде этого:

Runtime.getRuntime().exec("chmod u+x "+FILENAME);

Но если Вы хотите отслеживать его, более явно может получить stdin / stderr затем что-то больше как:

Process p = Runtime.getRuntime().exec("chmod u+x "+FILENAME);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));    
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

Который я получил отсюда: http://www.devdaily.com/java/edu/pj/pj010016/pj010016.shtml

Обновление:

Тестовая программа:

package junk;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Main{
  private String scriptContent = '#!/bin/bash \n echo "yeah toast!" > /tmp/toast.txt';
  public void doIt(){
    try{
      Writer output = new BufferedWriter(new FileWriter("/tmp/toast.sh"));
      output.write(scriptContent);
      output.close();
      Runtime.getRuntime().exec("chmod u+x /tmp/toast.sh");
    }catch (IOException ex){}
  }

  public static void main(String[] args){
    Main m = new Main();
    m.doIt();
  }

}

На Linux, если Вы открываете файловый браузер и двойной щелчок по/tmp/toast.sh и принимаете решение выполнить его, он должен генерировать текстовый файл, который да жарит /tmp/toast.txt со словами ''. Я предполагаю, что Mac сделал бы то же, так как это - BSD под капотом.

10
ответ дан 5 December 2019 в 04:55
поделиться

Можно звонить File.setExecutable() установить исполняемый файл владельца укусило для файла, который мог бы быть достаточным для Вашего случая. Или Вы можете просто chmod это самостоятельно с системным вызовом с Process.

Увы, полно приводимое в действие программное изменение полномочий файла не доступно до Java 7. Это будет часть Нового набора функций IO, о котором можно читать больше здесь.

22
ответ дан 5 December 2019 в 04:55
поделиться

На Mac OS X, помимо chmod +x, необходимо дать a .command расширение Вашего сценария оболочки, если Вы хотите запустить его двойным щелчком.

2
ответ дан 5 December 2019 в 04:55
поделиться

Этот ответ, который я записал для вопроса, как я программно изменяю полномочия файла, показывает chmod пример через собственный вызов с помощью jna, который должен работать над Mac OS X.

1
ответ дан 5 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: