2013-07-16 12 views
5

Jestem bardzo zainteresowany ILNUmerics i chciałbym wypróbować darmową wersję, ale mam problemy.Początkujący ILNumerics: zainstaluj pod VS2012

Zacząłem od aplikacji konsolowej i próbowałem uruchomić aplikację "hello ilnumerics", ale zauważyłem, że VS nie znajduje bibliotek MKL.

Używam VS2012 pod Windwos 8 (przez Bootcamp na komputerze MacBook Pro w połowie 2010 r., Powinno to być istotne); Zainstalowałem rozszerzenie NuGet Packages z rozwiązania Project. Następnie kliknij prawym przyciskiem myszy odniesienia w eksploratorze rozwiązań, "Zarządzaj Nu Pobierz pakiety", fron online/wyszukaj znalezione ilnumerics w różnych wersjach. Wybrałem "ILNumerics" i zainstalowałem. Do mojego projektu dodano "ILNumerics" i "ILNumerics.Native". Następnie widzę ILNumerics w "References" w Solution Explorer, a także dostaję dwa nowe foldery/bin32/i/bin64/oba zawierają dwie biblioteki DLL o nazwach: libiomp5md.dll i mkl_custom.dll. Sprawdziłem ich właściwość "Kopiuj do Ouput Directory" i wszystkie są ustawione na "Kopiuj, jeśli nowsze".

Najwyraźniej mkl_custom nie został znaleziony. Piszę poniższy kod, zaczerpnięte z podręcznika Szybki start:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using ILNumerics; 

namespace ConsoleApplication3 
{ 

    class Program : ILMath 
{ 
    static void Main(string[] args) 
    { 

     ILArray<double> A = array<double> 
      (new double[] { 1,1,1,1,1,2,3,4,1,3,6,10,1,4,10,20} ,4, 4); 
     ILArray<double> B = counter(4, 2); 

     ILArray<double> Result = linsolve(A, B); 
     Console.Out.WriteLine("A: " + Environment.NewLine + 
       A.ToString()); 

      Console.Out.WriteLine("B: " + Environment.NewLine + B.ToString()); 

      Console.ReadKey(); 
     } 
    } 
} 

i otrzymuję ten wyjątek: nieobsługiwany wyjątek typu „System.DllNotFoundException” wystąpił w ILNumerics.dll

Informacje dodatkowe: nie można load DLL 'mkl_custom': Nie można znaleźć określonego modułu. (Wyjątek od HRESULT: 0x8007007E)

Jeśli nie będę wywoływać linsolve, to metoda ToString z ILArray działa: jeśli komentarz: // Wynik ILArray = linsolve (A, B);

Otrzymuję dwie matryce wydrukowane na ekranie.

Próbowałem również obliczyć wyznacznik macierzy i otrzymałem ten sam wyjątek: najwyraźniej za każdym razem, gdy wołam mkl_custom VS nie jest w stanie go znaleźć.

Każda pomoc/podpowiedź, proszę?

Ponadto, czy konieczne jest zainstalowanie ILNumerics przez NuGet na każdym projekcie dodanym do rozwiązania? Czy byłoby możliwe zainstalowanie go lokalnie raz dla wszystkich, a następnie w razie potrzeby dodać odniesienie?

+0

Proponuję dodać znacznik C# do tego – doctorlove

+0

Dzięki doctorlove; zrobimy to od razu –

+0

Kiedy zaglądasz do swojego folderu wyjściowego: czy są tam pliki binarne? Powinieneś zobaczyć: Twój * .exe, ILNumerics.dll, mkl_custom.dll i LIBIOMP5MD.DLL? I zaczynając exe stąd ... ten sam błąd? –

Odpowiedz

3

dwie opcje:

1) Upewnij się, że wszystkie pliki binarne są dostepne jako przeznaczone: ILNumerics wykorzystuje cele AnyCPU i wybiera podfolder platforma dependend dodając „bin32”/„bin64” katalogów do zmiennej PATH envoronment na uruchomienie. Być może na twoim komputerze coś się nie udaje? Możesz się upewnić, umieszczając odpowiednie pliki binarne (w zależności od platformy) bezpośrednio na ścieżce wyjściowej ręcznie.

2) Jeśli błąd nadal występuje: mkl_custom.dll zależy od innych bibliotek dll. Jeden (libiomp5md.dll) jest dostarczany z pakietem ILNumerics nuget. Oczekuje się, że inni będą istnieć w systemie: KERNEL32.DLL i MSVCR110.DLL. Upewnij się, że masz te! Jeśli brakuje biblioteki jądra -> nazwij ją cudem i zainstaluj ponownie system. Jeśli brakuje msvcr110 -> przejdź do here i zainstaluj "Redystrybucję Visual C++ dla Visual Studio 2012".

Jeśli problem będzie się powtarzał, możesz zgłosić błąd na ILNumerics bugtracker, ponieważ środowisko wykonawcze powinno tam być, ponieważ napisałeś, że używasz VS2012. Być może jest to jednak problem z wersjonowaniem.

EDYCJA: Od wersji 4.0 ILNumerics nie wdraża natywnych plików binarnych w bin32/bin64/podfolderu, ale instaluje wszystkie natywne zależności w całym systemie w folderach GAC i System32/WOW. Stary schemat nadal będzie działał (dla kompatybilności ze starymi projektami). Ale nie jest już konieczne zajmowanie się bezpośrednio zależnościami ILNumerics. Powinny one być po prostu znalezione w czasie wykonywania.

+0

"Możesz się upewnić, umieszczając odpowiednie pliki binarne (w zależności od platformy) bezpośrednio na ścieżce wyjściowej ręcznie." To rozwiązało problem. Wielkie dzięki 303 –

+0

Czy istnieje łatwiejsza metoda dołączania ILNumerics do kolejnych projektów? Czy muszę używać NuGet dla każdego pojedynczego projektu? Dziękuję wszystkim, którzy chcą pomóc. –

+0

Czy mógłbyś zgłosić błąd w wymienionym bugtrackerze? Twój problem może dotyczyć innych użytkowników o tej samej konfiguracji. Możesz pomóc w śledzeniu problemu (i jego naprawie) przez * o tym, że ILNumerics pisze dziennik błędów -> używając System.Diagnostics; (.. i jako pierwszy wiersz w Form_Load :) Trace.Listeners.Add (new TextWriterTraceListener ("Err.txt")); Trace.AutoFlush = true; i * powtórz błąd, usuwając pliki binarne z folderu wyjściowego i * wyślij wygenerowany plik Err.Log do nas ([email protected]). Stukrotne dzięki! –

0

Podobnie jak numbers303 powiedział, ILNumerics.dll nie może znaleźć wymaganej zależności. Możesz brutalnie wymusić naprawienie tej zależności, kopiując wymagane biblioteki DLL do tego samego katalogu, co plik ILNumerics.dll, jako etap kompilacji postów, ale myślę, że istnieje bardziej eleganckie rozwiązanie.

Rozwiązanie konsoli VS2010 .NET jest domyślnie tworzone z konfiguracją x86. Kompilowanie i uruchamianie przykładu ILNumerics Witaj ILNumerics! kod z tą konfiguracją powoduje, że nie znaleziono wyjątku DLL (mkl_custom.dll).

Ponowne kierowanie rozwiązania za pomocą menedżera konfiguracji na "Dowolny procesor" naprawiło problem dla mnie: W programie Solution Explorer kliknij prawym przyciskiem myszy rozwiązanie i wybierz właściwości. Wybierz Właściwości konfiguracji i kliknij przycisk Configuration Manager ... w prawym górnym rogu. Upewnij się, że projekt korzystający z ILNumerics ma wybraną opcję "Any CPU". Jeśli opcja "Dowolny procesor" nie jest dostępna jako wybór, wybierz "" z listy rozwijanej i utwórz platformę "Any CPU" na podstawie bieżącej platformy. Zwykle oznacza to akceptację wartości domyślnej w oknie dialogowym "New Project Platform". Prawdopodobnie będziesz także chciał zmodyfikować "Aktywną platformę rozwiązań", aby zawierała również cel "Any CPU".

Przebuduj/uruchom.

0

W moim przypadku pomogło zainstalować "Redystrybucję Visual C++ dla Visual Studio 2012", chociaż pracuję z Visual Studio 2010 z odpowiednim "Visual C++ Redistributable for Visual Studio 2010". Które działało dobrze, o ile plik mkl_custom.dll nie jest potrzebny. Ale moi koledzy nie mają tego problemu bez zainstalowanego Redystrybucyjnego 2012.