我已經搜索了幾個小時如何解決這個問題,我試過的一切都沒有工作。 我試圖靜態鏈接某些庫,(libPoco,libmysqlcpp,libmysqlclient,libssl)。cmake忽略靜態庫鏈接請求
我正在使用cmake,雖然我正在定義靜態庫,但cmake只是查找動態庫。我知道我的文件系統中有靜態存檔所需的所有庫,並且我知道它們在哪裏。
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}
/lib
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/usr/lib/x86_64-linux-gnu)
find_library(POCO_NET NAMES libPocoNet.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library(POCO_UTIL NAMES libPocoUtil.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library(POCO_XML NAMES libPocoXML.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (MYSQL_CLIENT NAMES libmysqlclient.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (MYSQL_CPP NAMES libmysqlpp.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
find_library (LIBSSL NAMES libssl.a PATHS CMAKE_LIBRARY_PATH STATIC IMPORTED)
if (POCO_NET AND POCO_UTIL AND POCO_XML AND MYSQL_CLIENT AND MYSQL_CPP AND LIBSSL)
message(STATUS ${POCO_NET})
message(STATUS ${POCO_UTIL})
message(STATUS ${POCO_XML})
message(STATUS ${MYSQL_CLIENT})
message(STATUS ${MYSQL_CPP})
message(STATUS ${LIBSSL})
target_link_libraries(icarus
PocoNet
PocoUtil
PocoXML
mysqlpp
mysqlclient
ssl)
else()
message(FATAL_ERROR "FATAL ERROR: missing library")
endif (POCO_NET AND POCO_UTIL AND POCO_XML AND MYSQL_CLIENT AND MYSQL_CPP AND LIBSSL)
但是當我運行cmake的..我得到的是:
-- /usr/local/lib/libPocoNet.so
-- /usr/local/lib/libPocoUtil.so
-- /usr/local/lib/libPocoXML.so
-- /usr/lib/x86_64-linux-gnu/libmysqlclient.so
-- /usr/lib/libmysqlpp.so
-- /usr/lib/libssl.so
當我嘗試編譯,我得到了一個未定義的引用,因爲我使用的是-static標誌。 我在這裏錯過了什麼? 有沒有辦法強制cmake查找靜態庫而不是動態庫? 我對此有錯誤嗎? 謝謝。
感謝您的答覆!我做了你所說的,但我仍然從cmake獲得相同的輸出(顯示* .so),並嘗試將靜態鏈接鏈接到動態對象。它似乎仍然忽略了* .a – 2013-05-02 19:05:56
沒關係,你是對的,cmake被緩存,刪除調試目錄並再次嘗試,現在它使用* .a。謝謝 ! :) – 2013-05-02 19:12:38
另外,FIY:設置(CMAKE_FIND_LIBRARY_SUFFIXES .a $ {CMAKE_FIND_LIBRARY_SUFFIXES}) – 2013-05-02 19:32:11