DllNotFoundException:libzmq

时间:2012-11-12 16:08:31

标签: c# unity3d zeromq dllnotfoundexception

我尝试使用ZeroMQ C#绑定(http://www.zeromq.org/bindings:clr)与我在Unity中创建的游戏服务器进行通信(我使用的是Mac OS X 10.8) 。因此,我创建了一个简单的函数,它连接到服务器,发送消息然后接收消息:

using UnityEngine;
using System.Runtime.InteropServices;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ZeroMQ;



public class NetworkZero : MonoBehaviour {

    // Use this for initialization
    public static NetworkZero instance; 

    void Start () {
        instance = this;
        Debug.Log("START NETWORK COMMUNICATION");
    }


    // Update is called once per frame
    void Update () {
        using (ZMQ.Context context = new ZMQ.Context(1))
            using (ZMQ.Socket client = context.Socket(ZMQ.SocketType.REQ))
            {
                 string sendMSG = "CLIENT";
                 client.Connect("tcp://localhost:31415");
                 client.Bind("tcp://localhost:31415");
                 client.Send(sendMSG, Encoding.Unicode);
                 string message = client.Recv(Encoding.Unicode);
                 Debug.Log("Received request: " + message);
            }
    }
}

我按照说明在项目中包含必要的库,并在monoDevelop中添加了对这些库的引用。但是在程序构建的时候,当我尝试运行程序时仍然会出现以下错误:

DllNotFoundException: libzmq
ZMQ.Context..ctor (Int32 io_threads)
NetworkZero.Update () (at Assets/SLIP/NetworkZero.cs:26)

有人有任何建议吗?

3 个答案:

答案 0 :(得分:0)

确保您已设置'复制本地'对于引用的程序集为true。

答案 1 :(得分:0)

当我添加dll时,我总是将它们添加到Unity中(将它们拖放到某个地方),然后Unity完成了一些魔法并重新生成了IDE项目文件,所有引用都正确无误。

黑暗中的另一个刺 - 如果这些库做互操作,你可能需要它们在一个文件夹“插件”(可能需要直接在资产,“资产/插件”,未经测试)。插件虽然是Unity的专业功能,但它们不适用于网络应用程序。

答案 2 :(得分:0)

我在过去尝试在32位应用程序中使用64位dll时收到了这个。你提到它在编辑器中工作(64位)但在构建中没有,我建议你仔细检查你的架构是否与ZeroMQ库的架构相匹配?要做到这一点,去[Unity]>文件>然后在Architecture下选择x86_64。

enter image description here