這個has been asked on SO before甚至有a related bug on this in CMAKE。但是,我的問題是一個變化,答案並不明確。find_library選擇靜態庫而不是共享庫
我的問題是我使用MinGW在Linux上交叉編譯Windows。靜態庫分別命名爲libGLESv2.dll.a
和libiconv.dll.a
,分別用於DLL libGLESv2.dll
和iconv.dll
。
例子:
find_library(FOUND_LIB_X NAMES "zlib1.dll" PATHS ${CMAKE_FIND_ROOT_PATH}/bin/)
finds this: zlib1.dll
find_library(FOUND_LIB_Y NAMES "libGLESv2.dll" PATHS ${CMAKE_FIND_ROOT_PATH}/bin/)
finds this: libGLESv2.dll.a
find_library(FOUND_LIB_Y NAMES "iconv.dll" PATHS ${CMAKE_FIND_ROOT_PATH}/bin/)
finds this: libiconv.dll.a
The CMAKE bug似乎是指在靜態庫被命名爲blah.lib傳統的情況下(Windows)或blah.a(Linux)的。在Linux上使用mingw的交叉編譯器情況下,它們被命名爲blah.dll.a
我需要它來查找字面上被稱爲iconv.dll
的文件,而不是其他任何東西。如果它沒有字面上的發現,然後中止。我是否使用錯誤的CMAKE功能? (請勿使用find_library()
?)
奇怪。根據[文檔](https://cmake.org/cmake/help/v3.6/command/find_library.html),「給NAMES選項的每個庫名稱首先被視爲庫文件名,然後考慮平臺特定的前綴(例如lib)和後綴(例如.so).'。你確定它找到'libiconv.dll.a' **在同一個目錄**,其中包含'iconv.dll'嗎?最後,您可以在調用find_library之前清理變量'CMAKE_FIND_LIBRARY_PREFIXES'或'CMAKE_FIND_LIBRARY_SUFFIXES'。 – Tsyvarev
順便說一下,在每次重新配置之前清理CMake緩存,以允許'find_library'找到* new *,不是嗎? – Tsyvarev
@Tsyvarev - 一個名爲iconv.dll的文件位於PATHS參數中指定的/ bin文件夾中。另一個字面上稱爲libiconv.dll.a的文件位於/ lib中,與/ bin平行。是的,我清除了緩存。 – 010110110101