之前使用 pthread_create() 在 BTStack 中起线程,带来了一个问题,编译出来的 exe,双击执行的时候弹出一个对话框,如题。使用 CreateThread() 则不会出现,之前提过需要根据 OS 选择合适的接口去起线程,但也可能是 MSYS2 里面做了什么。
在 MSYS2 中使用 ./xxx.exe 方式启动,也不会出现,libwinpthread-1.dll 在 MSYS2 中的 \msys64\mingw64\bin 已经存在,在 MSYS2 中通过命令执行的方式能找到,而双击 exe 的方式是找不到的。
网上总结的方法:
- 把 libwinpthread-1.dll copy 到 C:\Windows\System32
- 在编译选项后面添加如下选项,把dll编成静态的,不需要再去依赖外部的 dll
-static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic
都有效