我不是第一個遇到libpng問題的人,尤其是當我想鏈接到 Windows 上的自建源時。我正在使用libpng1638來自https://github.com/glennrp/libpn g的源代碼。半官方 - 這個版本的原因是它有一個CMake構建/安裝腳本。
zlibenter code here已構建/找到并且庫安裝在c:\Program Files\libpng(我已CMAKE_INSTALL_PREFIX為此設定)
執行find_package(PNG 16). 啟用除錯標志后,會列出許多搜索目錄,但最終無法找到PNG-config.cmake可以鏈接到已安裝路徑和檔案的腳本。
當我設定CMAKE_PREFIX_PATH到正確的檔案夾時似乎沒有幫助,原因如下所述。
這是我在腳本中使用的命令(zlib已經找到):
set(CMAKE_FIND_DEBUG_MODE TRUE)
find_package(PNG 16 PATHS "C:\\Program Files\\libpng\\lib\\libpng")
set(CMAKE_FIND_DEBUG_MODE FALSE)
這是除錯跟蹤的輸出:
...
find_package considered the following locations for the Config module:
...
C:/Program Files/CMake/PNGConfig.cmake
C:/Program Files/CMake/png-config.cmake
C:/Program Files (x86)/PNGConfig.cmake
C:/Program Files (x86)/png-config.cmake
C:/Program Files/libpng/lib/libpng/PNGConfig.cmake
C:/Program Files/libpng/lib/libpng/png-config.cmake
事實上,png-config.cmake在我的系統上的任何地方都找不到任何檔案。在 的源代碼CMakeLists.txt中libpng,XXX-config.cmake為Win_32系統故意禁用了創建這些腳本的部分:
# Install the pkg-config files.
if(NOT CMAKE_HOST_WIN32 OR CYGWIN OR MINGW)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/libpng-config
DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PNGLIB_NAME}-config
DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
由于我不想涉足源檔案(最終直接從網路上拉取),所以我想了解一下。為什么本機 Win32 版本會禁用此功能?(大多數在線資訊使用 Linux 子系統或包管理器..)
其他軟體包,例如zlib將其XXX-config.cmake檔案正確復制到安裝檔案夾中,FindXXX.cmake腳本可以在其中正確提取它們。
為了完整libpng起見,這里是構建的輸出(msvc)
-- Install configuration: "Debug"
-- Installing: C:/Program Files/libpng/lib/libpng16d.lib
-- Installing: C:/Program Files/libpng/bin/libpng16d.dll
-- Installing: C:/Program Files/libpng/lib/libpng16_staticd.lib
-- Installing: C:/Program Files/libpng/include/png.h
-- Installing: C:/Program Files/libpng/include/pngconf.h
-- Installing: C:/Program Files/libpng/include/pnglibconf.h
-- Installing: C:/Program Files/libpng/include/libpng16/png.h
-- Installing: C:/Program Files/libpng/include/libpng16/pngconf.h
-- Installing: C:/Program Files/libpng/include/libpng16/pnglibconf.h
-- Installing: C:/Program Files/libpng/bin/pngfix.exe
-- Installing: C:/Program Files/libpng/bin/png-fix-itxt.exe
-- Installing: C:/Program Files/libpng/share/man/man3/libpng.3
-- Installing: C:/Program Files/libpng/share/man/man3/libpngpf.3
-- Installing: C:/Program Files/libpng/share/man/man5/png.5
-- Installing: C:/Program Files/libpng/lib/libpng/libpng16.cmake
-- Installing: C:/Program Files/libpng/lib/libpng/libpng16-debug.cmake
非常感謝所有的洞察力!
更新 1
在擺弄安裝命令之后,我必須得出結論,libpng16.zip來自https://github.com/glennrp/libpng 的libpng-并未將 Windows 作為構建目標進行維護。
lpng1637.zip來自https://sourceforge.net/projects/libpng/有同樣的問題。
更新2:
到目前為止,我已經嘗試過設定PNG_DIR、設定CMAKE_PREFIX_PATH和其他一些失敗的事情。只有一個似乎有效,即將環境PNG_ROOT變數設定為正確的安裝檔案夾。這太丑了,但它似乎是唯一有效的選擇。
uj5u.com熱心網友回復:
因此,對于像我一樣嘗試freetype2在 Windows 專案中使用的人,以下是構建依賴項的方法:
- 確保您
zlib也在C:\Program Files\Zlib檔案夾中構建和安裝 zlib通常可以毫無問題地找到。可以肯定的是,洗掉所有其他事件,尤其是那些在下面的事件(C:\Program Files (x86)如果有的話)。這將確保find_package(..)不會混淆不同的目標。使用-DCMAKE_INSTALL_PREFIX強制建筑/安裝到該目錄中。- 將環境 PNG_ROOT 環境變數設定為
C:\Program Files\libpng - 將環境 BZIP2_ROOT 環境變數設定為
C:\Program Files\bzip2 - 將環境 ZLIB_ROOT 環境變數設定為
C:\Program Files\zlib
我對依賴項Brotli和做了同樣的事情Harfbuzz,但到目前為止還沒有運氣。Harfbuzz似乎與 freetype2 有一些奇怪的雞/蛋關系。
為了設定freetype2with的構建CMake,在構建依賴項之后,這些標志起作用:
-DFT_DISABLE_HARFBUZZ=True
-DFT_REQUIRE_PNG=True
-DFT_DISABLE_BROTLI=True
-DFT_REQUIRE_BZIP2=True
-DCMAKE_PREFIX_PATH="C:\Program Files\libpng;C:\Program Files\bzip2;C:\Program Files\brotli;C:\Program Files\zlib;C:\Program Files\harfbuzz"
請注意,libpng在拉zlib的依賴,所以沒有真正的需要,以指定標志恕我直言,所以我不觸碰它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395870.html
下一篇:查找泛型型別的類參考
