首页 > 解决方案 > dlmopen 导致 zmq 错误“系统调用中断”

问题描述

我正在尝试使用几个实例dlmopen()来启动相同的文件。 因为我的共享对象包含很少的静态方法,所以我必须使用它来创建它的适当实例。 对于每个实例(如果重要,都在同一个线程中),在我使用的构造函数中:.so
dlmopen()

handle_ = dlmopen(LM_ID_NEWLM, "path_to_so", RTLD_LAZY | RTLD_DEEPBIND);

而且我没有收到任何错误,我什至可以dlsym()用来从 so 文件中调用函数:

int (*function_name)(int, const char *);
function_name = (int (*)(int, const char *))(unsigned long)dlsym(handle_, "function_name");

发生的事情是当我尝试使用任何类型的“ zmq send ”方法(接收效果很好)时,我得到:

terminate called after throwing an instance of 'zmq::error_t'
what(): Interrupted system call

即使在我终止了对象dlmopen()和创建它们的对象之后。

有没有人遇到过这种问题?我试图改变标志,但dlmopen()没有运气。

这是 zmq_send() 的代码:

    inline size_t send (const void *buf_, size_t len_, int flags_ = 0)
    {
        int nbytes = zmq_send (ptr, buf_, len_, flags_);
        if (nbytes >= 0)
            return (size_t) nbytes;
        if (zmq_errno () == EAGAIN)
            return 0;
        throw error_t ();
    }

标签: zeromqdlopen

解决方案


推荐阅读