如果在 DLL 中使用 OpenBLAS,我不知道是否有办法释放它,但是当我加载使用 OpenBLAS 的 DLL,然后尝试释放它时,FreeLibrary 函数挂起(死锁?)并且永远不会返回。
我使用从http://sourceforge.net/projects/openblas/files/v0.2.8/下载的预构建包 使用 Visual Studio 2010 编译测试程序。
有任何想法吗?
这是重现该问题的代码:
使用 OpenBLAS 的虚拟 DLL,什么都不做:
#include "stdafx.h"
#include <cblas.h>
BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
void FunctionNeverCalled()
{
float f = 1;
cblas_sasum(1, &f, 1);
}
调用 DLL 的程序:
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hInstance = ::LoadLibraryExW(L"..\\Debug\\DllUsingOpenBlas.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
::FreeLibrary(hInstance); // Hangs on FreeLibrary
return 0;
}