Я боролся с freetype2 в течение недели, пытаясь заставить его работать на 32-битной Windows, но он просто не работает. Мой CMakeLists.txt выглядит следующим образом:
cmake_minimum_required(VERSION 3.0.0)
set(CMAKE_CXX_STANDARD 17)
project(template-project) # change the name here
file(GLOB_RECURSE SOURCE_FILES src/*.cpp)
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
list(APPEND CMAKE_PREFIX_PATH "D:/Installs/ProgFiles/glew")
find_package( OpenGL REQUIRED )
include_directories( ${OPENGL_INCLUDE_DIRS} )
# this is so stupid
set(CMAKE_SIZEOF_VOID_P 4)
if (${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
# ensure 32 bit on clang
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -target i386-pc-windows-msvc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -target i386-pc-windows-msvc")
add_definitions("--target=i386-pc-windows-msvc")
endif ()
set(FT_DISABLE_HARFBUZZ TRUE)
target_include_directories(${PROJECT_NAME} PRIVATE
libraries/minhook/include
libraries/gd.h/include
libraries/gd.h/
libraries/imgui
libraries/glad/include
libraries/stb
libraries/freetype2/include
)
add_subdirectory(libraries/minhook)
add_subdirectory(libraries/cocos-headers)
add_subdirectory(libraries/glfw)
add_subdirectory(libraries/glm)
add_subdirectory(libraries/freetype2)
target_link_libraries( ${PROJECT_NAME} ${OPENGL_LIBRARIES} glfw )
if ( MSVC )
if (${CMAKE_VERSION} VERSION_LESS "3.6.0")
message( "\n\t[ WARNING ]\n\n\tCMake version lower than 3.6.\n\n\t - Please update CMake and rerun; OR\n\t - Manually set 'GLFW-CMake-starter' as StartUp Project in Visual Studio.\n" )
else()
set_property( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT GLFW-CMake-starter )
endif ()
endif ()
target_link_libraries(${PROJECT_NAME} opengl32.lib minhook cocos2d rpcrt4.lib glm ${PROJECT_SOURCE_DIR}/libraries/freetype2/objs/Win32/Release/freetype.lib)
Самой большой проблемой в выводе являются следующие строки:
[cmake] -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
[cmake] -- Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
[cmake] -- Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)
[cmake] -- Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
[cmake] -- Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
[cmake] -- Could NOT find BrotliDec (missing: BROTLIDEC_INCLUDE_DIRS BROTLIDEC_LIBRARIES)
Я нахожусь в Windows и совершенно не знаю, как это исправить. Я пытался установить zlib через mingw32 и пытался связать его так же, как я делаю такие вещи, как minhook, но безрезультатно.
Используете ли вы msys2 для установки MinGW и pacman для установки зависимостей этих библиотек? https://www.msys2.org/
@drescherjm Это сработало! Большое спасибо. Не могли бы вы добавить это как ответ, чтобы я мог пометить его как решенный?
Я рекомендую другой подход, чем ручная загрузка зависимостей с открытым исходным кодом при использовании MinGW. Вместо поиска отдельных двоичных загрузок переключитесь на использование msys2 для установки MinGW и используйте управление пакетами msys2 для всех ваших зависимых библиотек с открытым исходным кодом.
Первый шаг — удалить вашу текущую установку MinGW, чтобы у вас не было конфликтующих / возможно несовместимых dll MinGW в вашем PATH, которые могут вызвать проблемы в будущем при выполнении ваших программ.
После этого установите msys2: Как установить MinGW-w64 и MSYS2?
Затем, чтобы установить ваши зависимости для 32-разрядной версии, откройте терминал mingw32, который по умолчанию установлен в «C:\msys64\mingw32.exe», и используйте диспетчер пакетов msys2 pacman
для установки зависимых пакетов.
Веб-страница для msys2 имеет удобную функцию поиска пакетов в верхней части этой страницы: https://packages.msys2.org/queue
Давайте начнем с zlib
из ваших зависимостей. Введите zlib
в поле поиска и нажмите поиск. Введите mingw-w64-zlib
, затем найдите пакеты i686 для mingw, чтобы найти правильный пакет для 32-битного mingw. Я нашел следующую ссылку для zlib для mingw32 со следующей страницей: https://packages.msys2.org/package/mingw-w64-i686-zlib?repo=mingw32
Инструкции по установке для этого перечислены в центре страницы: pacman -S mingw-w64-i686-zlib
поэтому скопируйте эту команду в терминал mingw32:
JMDLAPTOP1+dresc@JMDLAPTOP1 MINGW32 ~
# pacman -S mingw-w64-i686-zlib
resolving dependencies...
looking for conflicting packages...
Packages (1) mingw-w64-i686-zlib-1.2.13-2
Total Download Size: 0.10 MiB
Total Installed Size: 0.39 MiB
:: Proceed with installation? [Y/n]
Нажмите Y, чтобы установить этот пакет.
:: Proceed with installation? [Y/n] y
:: Retrieving packages...
mingw-w64-i686-zlib-1.2.13... 102.8 KiB 126 KiB/s 00:01 [###############################] 100%
(1/1) checking keys in keyring [###############################] 100%
(1/1) checking package integrity [###############################] 100%
(1/1) loading package files [###############################] 100%
(1/1) checking for file conflicts [###############################] 100%
(1/1) checking available disk space [###############################] 100%
:: Processing package changes...
(1/1) installing mingw-w64-i686-zlib [###############################] 100%
JMDLAPTOP1+dresc@JMDLAPTOP1 MINGW32 ~
Продолжите аналогичный процесс для других зависимых пакетов.
Используйте правильный менеджер пакетов!