Не могу установить CLOJURE_LOAD_PATH; получение TypeInitializationError из среды выполнения - PullRequest
2 голосов
/ 05 января 2012

Я пытаюсь запустить Clojure на CLR и зацикливаюсь на некоторых основных проблемах.Исходя из этого вопроса Я использую следующий код:

В program.clj:

(ns program
  (:require [clojure.core])
  (:gen-class
   :methods [#^{:static true} [output [int int] int]]))

(defn output [a b]
  (+ a b))

(defn -output [a b]
  (output a b))

(defn -main []
  (println (str "(+ 5 10): " (output 5 10))))

Затем в Program.cs:

using System;
using clojure.lang;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            program p = new program();
            System.Console.WriteLine(p.output(5, 9));
            System.Console.ReadLine();
        }
    }
}

Когда я запускаю Program.cs, он выдает ошибку TypeInitializationError с сообщением об ошибке «Не удалось найти clojure / core.clj.dll или clojure / core.clj на пути загрузки».Для отладки я добавил строки:

System.Environment.SetEnvironmentVariable("clojure.load.path", "c:\clojure");
System.Console.WriteLine(System.Environment.GetEnvironmentVariable("clojure.load.path"));
System.Console.WriteLine(RT.CLOJURE_LOAD_PATH);

Первый WriteLine показывает «c: \ clojure», как я и ожидал.Второй показывает «clojure.load.path».Насколько я понимаю, среда выполнения искала переменные среды для пути загрузки.Так почему же его не найти?Как еще можно установить путь загрузки?

Ответы [ 2 ]

2 голосов
/ 06 января 2012

Дан,

Вам нужно будет включить в свой проект следующие библиотеки, связанные с clojureclr:

`Clojure.dll,
clojure.clr.io.clj.dll,
clojure.core.clj.dll,
clojure.core.protocols.clj.dll,
clojure.core_clr.clj.dll,
clojure.core_deftype.clj.dll,
clojure.core_print.clj.dll,
clojure.core_proxy.clj.dll,
clojure.genclass.clj.dll,
clojure.gvec.clj.dll`

Когда у вас есть эти сборки, вы сможетезапустите baseball.exe.Если вы этого еще не сделали, вы можете проверить это сообщение в блоге: http://www.myclojureadventure.com/2011/12/intro-to-clojure-clr-calling-clojure.html Я столкнулся с той же проблемой, с которой вы столкнулись до того, как это подстегнуло пост.

0 голосов
/ 06 января 2012

Я не знаю много о Clojure / CLR, но я не предполагал бы, что изменение переменных среды после загрузки среды выполнения Clojure изменит пути загрузки Clojure. Это определенно не работает так в Clojure / JVM - такого рода параметры среды var -> system, очевидно, предназначены для исправления после загрузки основного кода. В Clojure / JVM это обычно означает, что вы запускаете основной процесс clojure из другого процесса, который уже установил для вас путь загрузки (обычно это пакетный скрипт, который запускает JVM напрямую или вызов leiningen / cake).

...