Я пытаюсь использовать dlmopen()
для запуска одного и того же файла .so
с несколькими экземплярами.
Поскольку общий объект включает в себя несколько stati c методов, я должен использовать 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 ();
}