Closed dragon-dan closed 1 year ago
环境:windows10、VS2019 初始使用3.6.0版,按照文档编译完成,挨个尝试示例程序,测试工程一直编译且运行成功。 下载3.6.0-2版本代码并编译完成,然后将测试工程的lib目录指向3.6.0-2版本文件夹,编译项目出现链接失败。
1>libfiber.lib(fiber_read.obj) : error LNK2001: 无法解析的外部符号 file_iocp_read 1>E:\MyCode\vsproject\repos\acltest\x64\Release\acltest.exe : fatal error LNK1120: 1 个无法解析的外部命令 1>已完成生成项目“acltest.vcxproj”的操作 - 失败。 ========== “生成”: 0 成功,1 失败,0 更新,0 已跳过 ==========
强行把这一个lib指向3.6.0版本编译的
又可以编译链接成功。
PS(一个示例程序有问题): 3.6.0及3.6.0-2的lib_fiber\samples\thread_cond文件下 线程共享锁及条件变量的示例程序不能用。 fiber_cond应该是搭配fiber_mutex使用,示例程序中是fiber_cond搭配fiber_event。 复制代码并换成fiber_mutex之后运行会出错如下:
<< consumer: lock msg_error->pid(25060), E:\MyCode\github\c++\acl\acl-3.6.0\lib_fiber\c\src\common\pthread_patch.c, pthread_mutex_unlock(317): ReleaseMutex error(企图释放并非呼叫方所拥有的多用户终端运行程序。) msg_fatal->pid(25060), fatal:E:\MyCode\github\c++\acl\acl-3.6.0\lib_fiber\c\src\sync\fiber_cond.c(139), thread_cond_timedwait: acl_fiber_mutex_unlock error=企图释放并非呼叫方所拥有的多用户终端运行程序。
反复尝试发现不能使用assert(),参考fibertbox.hpp全部换成调用返回后判断就正常了(如:if (mutex.lock() == false))。 linux环境尚未测试。
建议使用当前主干开发版,修复了一些已知问题,近期就会发布新版。
好的,坐等新版本
新版本已经发布,欢迎使用!
环境:windows10、VS2019 初始使用3.6.0版,按照文档编译完成,挨个尝试示例程序,测试工程一直编译且运行成功。 下载3.6.0-2版本代码并编译完成,然后将测试工程的lib目录指向3.6.0-2版本文件夹,编译项目出现链接失败。
1>libfiber.lib(fiber_read.obj) : error LNK2001: 无法解析的外部符号 file_iocp_read 1>E:\MyCode\vsproject\repos\acltest\x64\Release\acltest.exe : fatal error LNK1120: 1 个无法解析的外部命令 1>已完成生成项目“acltest.vcxproj”的操作 - 失败。 ========== “生成”: 0 成功,1 失败,0 更新,0 已跳过 ==========
强行把这一个lib指向3.6.0版本编译的
pragma comment(lib,"E:/MyCode/github/c++/acl/acl-3.6.0/x64/Release/libfiber.lib")
又可以编译链接成功。
PS(一个示例程序有问题): 3.6.0及3.6.0-2的lib_fiber\samples\thread_cond文件下 线程共享锁及条件变量的示例程序不能用。 fiber_cond应该是搭配fiber_mutex使用,示例程序中是fiber_cond搭配fiber_event。 复制代码并换成fiber_mutex之后运行会出错如下:
<< consumer: lock msg_error->pid(25060), E:\MyCode\github\c++\acl\acl-3.6.0\lib_fiber\c\src\common\pthread_patch.c, pthread_mutex_unlock(317): ReleaseMutex error(企图释放并非呼叫方所拥有的多用户终端运行程序。) msg_fatal->pid(25060), fatal:E:\MyCode\github\c++\acl\acl-3.6.0\lib_fiber\c\src\sync\fiber_cond.c(139), thread_cond_timedwait: acl_fiber_mutex_unlock error=企图释放并非呼叫方所拥有的多用户终端运行程序。
反复尝试发现不能使用assert(),参考fibertbox.hpp全部换成调用返回后判断就正常了(如:if (mutex.lock() == false))。 linux环境尚未测试。