You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 32位环境下Freetype2链接失败问题求助

Windows 32位环境下Freetype2配置失败问题

问题描述

在Windows 32位环境中尝试配置Freetype2一周仍未成功,CMake输出关键错误如下:

[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) 

当前使用的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)

尝试过通过mingw32安装ZLIB,也尝试过像配置minhook和glad那样链接,但均无效。

解决方案

1. 禁用Freetype的可选依赖

Freetype默认会启用对ZLIB、PNG、BZip2等库的支持,这些是可选依赖,若不需要相关功能,可直接禁用:
在add_subdirectory(libraries/freetype2)之前添加以下配置:

# 禁用所有可选依赖,仅保留核心功能
set(FT_DISABLE_ZLIB TRUE)
set(FT_DISABLE_PNG TRUE)
set(FT_DISABLE_BZIP2 TRUE)
set(FT_DISABLE_BROTLIDEC TRUE)

结合已设置的FT_DISABLE_HARFBUZZ TRUE,Freetype就不会再寻找这些库。

2. 手动指定依赖库路径(若需保留依赖功能)

如果确实需要这些依赖的功能,需下载对应32位版本的库,并在CMake中指定路径:

  • 下载ZLIB、PNG、BZip2、Brotli的32位预编译库(注意匹配你的编译器:MSVC或MinGW)
  • 在CMakeLists.txt中添加路径配置,以ZLIB为例:
set(ZLIB_INCLUDE_DIR "D:/path/to/zlib/include")
set(ZLIB_LIBRARY "D:/path/to/zlib/lib/zlib.lib") # 32位库文件
find_package(ZLIB REQUIRED)

其他库同理,替换对应的路径和库文件名。

3. 规范CMake 32位环境配置

手动设置CMAKE_SIZEOF_VOID_P 4的方式不够规范,建议通过CMake参数指定32位构建:

  • 使用CMake GUI时,配置阶段选择CMAKE_GENERATOR_PLATFORM为Win32
  • 使用命令行时,添加参数:cmake -G "Visual Studio 17 2022" -A Win32 ..(根据你的VS版本调整)
    避免手动设置指针宽度带来的潜在问题。

4. 移除硬编码的Freetype库链接

当前在target_link_libraries中硬编码的${PROJECT_SOURCE_DIR}/libraries/freetype2/objs/Win32/Release/freetype.lib会和add_subdirectory(libraries/freetype2)生成的库冲突,应移除该行,改用Freetype提供的目标:

target_link_libraries(${PROJECT_NAME} opengl32.lib minhook cocos2d rpcrt4.lib glm freetype)

内容的提问来源于stack exchange,提问作者DePianoman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 15:25:20