2012-01-28 24 views
8

Tôi đang cố gắng tương tác với thư viện ImageMagick trong Mono trên máy Mac. Tôi đã cài đặt thư viện ImageMagick bằng MacPorts và đã xác minh rằng tệp libMagickWand.dylib tồn tại trong thư mục /opt/local/lib. Tôi cũng đã tạo liên kết mềm tới tệp đó trong thư mục /usr/local/lib.DllNotFoundException với DllImport trong Mono trên Mac: kiến ​​trúc sai

Đây là tuyên bố DllImport tôi:

[DllImport("libMagickWand", EntryPoint = "MagickWandGenesis")] 
static extern void WandGenesis(); 

Dưới đây là App.config của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <dllmap dll="libMagickWand" target="/opt/local/lib/libMagickWand.dylib" /> 
</configuration> 

Và, cuộc gọi đến WandGenesis();, tôi nhận được một DllNotFoundException, với thông điệp 'libMagickWand'.

Tôi đã đọc this page và tôi nghĩ rằng tôi đang tuân thủ tất cả các quy tắc. Tôi có thể thử gì khác không?

Cập nhật:

Tôi chạy .exe với MONO_LOG_LEVEL = debug. Dưới đây là thông tin thích hợp:

Mono: DllImport error loading library 'dlopen(/opt/local/lib/libMagickWand.5.dylib, 9): 
no suitable image found. 
Did find: /opt/local/lib/libMagickWand.5.dylib: mach-o, but wrong architecture'. 

sai kiến ​​trúc: Tôi đang chạy Snow Leopard trong chế độ 32-bit và luôn luôn có. Tôi đã cài đặt ImageMagick với MacPorts và tôi đã cài đặt Mono bằng gói Mac từ mono-project.com. Điều gì sẽ được biên dịch với một kiến ​​trúc khác?

Cập nhật:

Tôi nghĩ rằng tôi thấy vấn đề của tôi:

MacBook-Pro:lib ken$ lipo -info libMagickWand.5.dylib 
Non-fat file: libMagickWand.5.dylib is architecture: x86_64 

Cập nhật:

... nhưng tôi vẫn đang gặp vấn đề. Tôi không thể tìm ra cách để biên dịch ImageMagick với kiến ​​trúc i386. Khi tôi cố gắng làm như vậy bằng cách sử dụng cờ, nó phàn nàn về các thư viện khác được biên dịch như 64-bit.

+0

Xem câu trả lời cập nhật của tôi. –

Trả lời

7

Cập nhật:

Mono trên Mac OS X là 32 bit (ít nhất là thường, bạn có thể xác nhận rằng với mono --version) và bạn đang cố gắng liên kết với 64bit nhị phân đó là không thể. Bạn phải cung cấp nhị phân 32 bit (hoặc sử dụng Mono 64 bit).


Bạn có lỗi ngay cả khi chỉ có tên tệp của thư viện trong mục tiêu và thư viện được đặt thích hợp (hoặc tập DYLD_LIBRARY_PATH) không? Trong trường hợp này, vui lòng cung cấp đầu ra của mono được thực thi với MONO_LOG_LEVEL = debug.

+1

Cảm ơn. Tôi đã chạy nó với MONO_LOG_LEVEL = gỡ lỗi và có một số thông tin chi tiết. Tôi sẽ cập nhật câu hỏi ban đầu của mình. – ken

Các vấn đề liên quan