我正在用C ++开发一个应用程序来检查用户的电子邮件帐户。此应用程序使用vmime库执行与POP3 / IMAP / SMTP协议相关的处理。
我将应用程序设计为持续工作。所以,它必须足够稳定!
有时,应用程序突然停止发出这个奇怪的错误:
ath.c:193: _gcry_ath_mutex_lock: Assertion `*lock == ((ath_mutex_t) 0)' failed.
Aborted
我知道vmime使用libgnutls,而这个使用libgcrypt。
有人可以帮忙解决这个错误吗?
有关详细信息,该应用程序是多线程的。我使用的是vmime-0.9.0,libgcrypt-1.4.4和libgnutls-2.8.5。
非常感谢,
答案 0 :(得分:2)
似乎vmime有一个与多线程应用程序中使用gnutls相关的错误。 我在下面的页面中做了gnutls的文档:
http://www.gnu.org/software/gnutls/manual/gnutls.html#Multi_002dthreaded-applications
我只是添加了一行:
gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
行之前:
gnutls_global_init();
在文件中:
net_tls_TLSSession.cpp
并重建了vmime。 当然,我在文档示例中包含了所需的头文件。