2011-03-23 76 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,否則是一個靜態庫。