2013-07-16 28 views
5

Tôi rất quan tâm đến ILNUmerics và muốn thử phiên bản miễn phí, nhưng tôi đang gặp khó khăn.Beginner ILNumerics: cài đặt theo VS2012

Tôi đã bắt đầu với ứng dụng bảng điều khiển và đang cố gắng chạy ứng dụng 'hello ilnumerics'console nhưng tôi nhận thấy rằng VS không tìm thấy thư viện MKL.

Tôi đang sử dụng VS2012 trong Windwos 8 (thông qua Bootcamp trên MacBook Pro vào giữa năm 2010; nên có liên quan); Tôi đã cài đặt phần mở rộng NuGet Packages từ giải pháp Dự án. Sau đó nhấp chuột phải vào các tài liệu tham khảo trong trình khám phá giải pháp, 'Quản lý Nu Get Packages', tìm kiếm trực tuyến/tìm kiếm được tìm thấy trong các phiên bản khác nhau. Tôi đã chọn 'ILNumerics' và cài đặt. Tôi nhận được 'ILNumerics' và 'ILNumerics.Native' được thêm vào dự án của tôi. Sau đó, tôi có thể thấy ILNumerics dưới 'Tham khảo' trong Solution Explorer và cũng nhận được hai thư mục mới/bin32/và/bin64/cả hai đều chứa hai DLL có tên: libiomp5md.dll và mkl_custom.dll. Tôi đã kiểm tra tài sản 'Sao chép vào Thư mục Ouput' của họ và tất cả đều được đặt thành 'Sao chép nếu mới hơn'.

Rõ ràng không tìm thấy mkl_custom. Tôi viết đoạn code sau, lấy từ hướng dẫn quickstart:

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(); 
     } 
    } 
} 

và tôi nhận được ngoại lệ này: Một ngoại lệ unhandled của loại 'System.DllNotFoundException' xảy ra ở ILNumerics.dll

thông tin bổ sung: Không thể tải DLL 'mkl_custom': Các mô-đun quy định không thể được tìm thấy. (Ngoại lệ từ HRESULT: 0x8007007E)

Nếu tôi không gọi phương thức ToString của ILArray sẽ hoạt động: nếu tôi nhận xét // ILArray Result = linsolve (A, B);

Tôi nhận được hai ma trận được in trên màn hình.

Tôi cũng đã cố gắng tính toán yếu tố quyết định của ma trận và có ngoại lệ tương tự: dường như bất kỳ lúc nào tôi gọi mkl_custom VS không thể tìm thấy nó.

Bất kỳ trợ giúp/gợi ý nào, vui lòng?

Ngoài ra, có cần phải cài đặt ILNumerics thông qua NuGet trên bất kỳ dự án nào được thêm vào giải pháp không? Có thể cài đặt nó cục bộ một lần cho tất cả và sau đó thêm tham chiếu nếu cần thiết?

+0

Tôi đề nghị bạn thêm thẻ C# vào số – doctorlove

+0

Cảm ơn doctorlove; sẽ làm điều đó ngay lập tức –

+0

Khi bạn nhìn vào thư mục đầu ra của mình: là các tệp nhị phân ở đó? Bạn sẽ thấy: * .exe, ILNumerics.dll, mkl_custom.dll và LIBIOMP5MD.DLL? Và bằng cách bắt đầu exe từ đây ... cùng một lỗi? –

Trả lời

3

Hai lựa chọn:

1) Hãy chắc chắn rằng, tất cả các mã nhị phân là accesible như dự định: ILNumerics sử dụng mục tiêu AnyCPU và chọn thư mục con nền tảng dependend bằng cách thêm "bin32"/"bin64" thư mục vào biến PATH envoronment trên khởi động. Có thể có thứ gì đó không hoạt động trên máy của bạn? Bạn có thể chắc chắn bằng cách đặt các tập tin nhị phân chính xác (tùy thuộc vào nền tảng của bạn) trực tiếp vào đường dẫn đầu ra theo cách thủ công.

2) Trong trường hợp lỗi vẫn còn: mkl_custom.dll phụ thuộc vào một số dll khác. Một (libiomp5md.dll) được gửi cùng với gói nuget ILNumerics. Những người khác dự kiến ​​sẽ tồn tại trên hệ thống của bạn: KERNEL32.DLL và MSVCR110.DLL. Hãy chắc chắn rằng, bạn có những điều này! Nếu dll hạt nhân bị thiếu -> gọi nó là một phép lạ và cài đặt lại hệ thống của bạn. Nếu thiếu msvcr110 -> hãy đi here và cài đặt "Visual C++ Redistributable cho Visual Studio 2012".

Trong trường hợp sự cố vẫn tiếp diễn, bạn có thể gửi lỗi trên ILNumerics bugtracker, bởi vì, thời gian chạy nên ở đó, như bạn đã viết bạn đang sử dụng VS2012. Có thể nó là một vấn đề versioning mặc dù.

EDIT: Kể từ phiên bản 4.0 ILNumerics không triển khai các tệp nhị phân gốc trong bin32/bin64/thư mục con nữa nhưng cài đặt tất cả các hệ thống phụ thuộc vào toàn bộ thư mục GAC và System32/WOW. Các chương trình cũ vẫn sẽ làm việc (cho khả năng tương thích với các dự án cũ) mặc dù. Nhưng nó không còn cần thiết nữa để đối phó với bất kỳ sự phụ thuộc nào cho ILNumerics một cách rõ ràng. Chúng chỉ nên được tìm thấy trong thời gian chạy.

+0

"Bạn có thể đảm bảo bằng cách đặt các tệp nhị phân chính xác (tùy thuộc vào nền tảng của bạn) trực tiếp vào đường dẫn đầu ra theo cách thủ công." Điều này giải quyết được vấn đề. Cảm ơn nhiều số303 –

+0

Có phương pháp nào dễ dàng hơn để đưa ILNumerics vào các dự án khác không? Tôi có phải sử dụng NuGet cho bất kỳ dự án nào không? Nhờ bất cứ ai sẵn sàng giúp đỡ. –

+0

Bạn có thể vui lòng gửi lỗi trên trình gỡ lỗi được đề cập không? Sự cố của bạn có thể ảnh hưởng đến những người dùng khác có cùng cấu hình. Bạn có thể giúp đỡ để theo dõi vấn đề xuống (và sửa chữa nó) bằng cách * có ILNumerics viết một bản ghi lỗi -> using System.Diagnostics; (.. và như dòng đầu tiên trong Form_Load :) Trace.Listeners.Add (new TextWriterTraceListener ("Err.txt")); Trace.AutoFlush = true; và * retrigger lỗi bằng cách loại bỏ các tập tin nhị phân từ thư mục đầu ra của bạn một lần nữa và * gửi Err.Log tạo ra cho chúng tôi ([email protected]). Cảm ơn rất nhiều! –

0

Giống như số303 cho biết, ILNumerics.dll không thể tìm thấy phụ thuộc bắt buộc. Bạn có thể brute lực sửa chữa phụ thuộc này bằng cách sao chép các DLL cần thiết để cùng một thư mục như ILNumerics.dll như là một bước xây dựng bài, nhưng tôi nghĩ rằng có một giải pháp thanh lịch hơn.

Giải pháp bảng điều khiển .NET VS2010 được tạo theo mặc định với cấu hình x86. Biên dịch và chạy ví dụ ILNumerics Hello ILNumerics! mã với cấu hình này dẫn đến một ngoại lệ DLL không tìm thấy (mkl_custom.dll).

Nhắm mục tiêu lại giải pháp thông qua trình quản lý cấu hình thành 'Mọi CPU' đã khắc phục sự cố cho tôi: Trong Solution Explorer, nhấp chuột phải vào giải pháp và chọn thuộc tính. Chọn Thuộc tính cấu hình và nhấp vào nút Trình quản lý cấu hình ... ở góc trên bên phải. Đảm bảo rằng dự án sử dụng ILNumerics có 'CPU bất kỳ' được chọn. Nếu 'CPU bất kỳ' không khả dụng dưới dạng lựa chọn, hãy chọn '' từ danh sách thả xuống và tạo nền tảng 'CPU bất kỳ' dựa trên nền tảng hiện tại của bạn. Thông thường, điều này chỉ có nghĩa là chấp nhận mặc định trong hộp thoại 'Nền tảng dự án mới'. Có thể bạn cũng sẽ muốn sửa đổi 'Nền tảng giải pháp tích cực': để chứa mục tiêu 'CPU bất kỳ'.

Tạo lại/chạy.

0

Trong trường hợp của tôi, nó giúp cài đặt "Visual C++ Redistributable cho Visual Studio 2012" mặc dù tôi làm việc với Visual Studio 2010 với tương ứng "Visual C++ Redistributable cho Visual Studio 2010" được cài đặt. Mà làm việc tốt miễn là mkl_custom.dll là không cần thiết. Nhưng các đồng nghiệp của tôi không có vấn đề này mà không cần cài đặt Redistributable 2012.