acl-dev / acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.83k stars 937 forks source link

3.6.0升级到3.6.0-2版本 测试工程链接失败 #300

Closed dragon-dan closed 1 year ago

dragon-dan commented 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版本编译的

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环境尚未测试。

zhengshuxin commented 1 year ago

建议使用当前主干开发版,修复了一些已知问题,近期就会发布新版。

dragon-dan commented 1 year ago

好的,坐等新版本

zhengshuxin commented 1 year ago

新版本已经发布,欢迎使用!