最近用MinGW编译一个DLL,遇到几个小问题,记录一下
1,DllMain不执行的问题
DLL写好以后,功能测试ok,但是发现DllMain未执行,导致代码里的初始化和析构均未能执行,查了下生成的dll,发现由于是c++编译,导致DllMain被改名了,解决方法加上extern "C"
2, 静态链接pthreadGC2
用测试程序测试的时候,提示未找到pthreadGC2.dll,于是在MinGW的目录下搜索pthread,发现有个 pthreads-win32-README的文档,里面详细讲述了如何静态链接pthread,概括步骤如下:
编译时定义PTW32_STATIC_LIB宏
链接pthreadGC2-static和ws2_32库(不需要链接pthread)
在调用pthread任何函数之前调用pthread_win32_process_attach_np()初始化(DLL在DLL_PROCESS_ATTACH分支下),结束后调用pthread_win32_process_detach_np()(DLL在下DLL_PROCESS_DETACH)
3,如果在exe里也用到了多线程,重复2的步骤