单声道:DllImport无法加载库'(null)'

时间:2010-10-12 04:42:13

标签: c# mono pinvoke

我正在尝试使用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)”?

2 个答案:

答案 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)。