我正在尝试使用C# ZeroMQ bindings。但是在Mono 2.8和OSX 10.6.4上,当我尝试运行示例应用程序时,出现DLLImport错误。具体做法是:
Unhandled Exception: System.DllNotFoundException: libzmq
at (wrapper managed-to-native) ZMQ/C:zmq_init (int)
at ZMQ+Context..ctor (Int32 io_threads) [0x00000] in <filename unknown>:0
at local_lat.Main (System.String[] args) [0x00000] in <filename unknown>:0
这个功能很简单:
[DllImport("libzmq", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr zmq_init(int io_threads);
当我使用MONO_LOG_LEVEL = debug时,mono会显示它正在寻找libzmq,但却不断失败,例如:
Mono: DllImport loading library: './libzmq.dylib'.
Mono: DllImport error loading library '(null)'.
我已经尝试将libzmq.dylib移动到本地文件夹并设置libzmq.dll.config文件,两者都无济于事。
有没有明显的理由说明为什么Mono找不到libzmq.dylib,它位于/ usr / local / lib中?为什么错误变成“(null)”?
答案 0 :(得分:0)
我不完全确定,但这可能是有用的阅读:
http://www.mono-project.com/Interop_with_Native_Libraries#Mac_OS_X_Framework_and_.dylib_Search_Path
基本上,您可能需要确保将DYLD_FALLBACK_LIBRARY_PATH设置为包含您的dylib的位置。
答案 1 :(得分:0)
问题是该库是64位的。这可以通过编译libzmq来解决:
./configure CFLAGS="-O -arch i386" CXXFLAGS="-O -arch i386" LDFLAGS="-arch i386" --disable-dependency-tracking
虽然这可能会破坏使用64位版本的库(即通过pyzmq的Python)。