2011-03-23 103 views
1

有没有办法检查找到的库是否是静态库?为了找到库我这样做:cmake检查库是否是静态的

IF(WIN32) 
    SET(CMAKE_FIND_LIBRARY_SUFFIXES .lib) 
ELSE() 
    SET(CMAKE_FIND_LIBRARY_SUFFIXES .a) 
ENDIF() 
find_library(QUANTLIB_LIBRARY NAMES QuantLib PATHS ${QUANTLIB_LIBRARY_SEARCH}) 

但是Windows上的.lib可能是一个DLL符号文件。我需要确保这实际上是库的静态形式,否则以后的链接将导致难以理解的错误消息。


如果你想知道,我真的不希望使用satic库,但QuantLib相对于多线程和共享库打破。这是我获得正确工作的最佳机会:静态链接到我的一个共享库。

回答

0

这里没有cmake方法。大多数find_package脚本都是从文件名中派生出来的:许多库都会将静态库与前置或后置处理区分开来:

作为解决方法,您可以尝试运行工具dumpbin并检查函数是否已导出。

dumpbin /exports QuantLib.lib 

如果这给你一个长长的导出列表,它很可能是一个DLL,否则是一个静态库。