has been asked on SO beforeさらにa related bug on this in CMAKEがあります。しかし、私の問題はバリエーションであり、答えは明らかではありません。find_libraryは共有ライブラリの代わりにスタティックライブラリを選択します
私のしわは、私がMinGWを使ってLinux上でWindows用にクロスコンパイルしていることです。静的ライブラリの名前は、それぞれlibGLESv2.dll
とiconv.dll
の場合、libGLESv2.dll.a
とlibiconv.dll.a
のようになります。
例:
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静的libにはblah.lib(Windows)またはblah.a(Linux)の命名された伝統的な状況に言及しているようです。 Linux上のmingwでのこのクロスコンパイラの状況では、blah.dll.aという名前が付けられています。
文字どおりiconv.dll
という名前のファイルを見つける必要があります。それが文字通り見つからなければ、中断する。間違ったCMAKE機能を使用していますか? (find_library()
を使用していない?)
奇妙な。 [documentation](https://cmake.org/cmake/help/v3.6/command/find_library.html)によると、 'NAMESオプションに与えられた各ライブラリ名は、まずライブラリファイル名とみなされ、次にプラットフォーム固有の接頭辞(例:lib)と接尾辞(例:.so).'あなたが 'iconv.dll'を含んでいる同じディレクトリ**に' libiconv.dll.a' **を見つけてもよろしいですか?最後の手段として、 'find_library'呼び出しの前に変数' CMAKE_FIND_LIBRARY_PREFIXES'または 'CMAKE_FIND_LIBRARY_SUFFIXES'を消去することができます。 – Tsyvarev
ところで、あなたは 'find_library'が何か新しいものを見つけることを許可するために毎回CMakeキャッシュを再構成する前にきれいにしていますか? – Tsyvarev
@Tsyvarev - 文字通りiconv.dllと呼ばれるファイルは、PATHSパラメータで指定された/ binフォルダにあります。文字通りlibiconv.dll.aと呼ばれる別のファイルは、/ binに/ binと並行しています。はい、私はキャッシュをクリアします。 – 010110110101