我有一个与OpenBLAS链接的项目。在Visual Studio的项目属性中,我在“其他依赖项”中将完整路径设置为openblas.lib
,但是MSVC仍然会生成依赖于openblas.dll的二进制文件。
该项目是由CMake使用OpenBLAS imported target OpenBLAS::OpenBLAS
生成的,但是我认为出于调试目的,最有趣的问题是,为什么MSVC不链接作为输入提供的文件中的对象。
答案 0 :(得分:1)
Windows上的* .lib可以是DLL的导入库,也可以是静态库。
CMake中的库是使用STATIC
或SHARED
属性构建的。如果在Windows平台上默认省略,则会构建共享库。可以通过CMake命令行上的-DBUILD_SHARED_LIBS=OFF
定义来更改。
从OpenBLAS发布CMakeLists.txt时,默认情况下,您正在Windows平台上构建DLL。因此,您链接到的库是一个导入库。
TL; DR :要运行OpenBLAS作为静态库,您需要在运行配置步骤时在CMake命令行中传递-DBUILD_SHARED_LIBS=OFF
。