安装libpng或其他C++库
在引用现成库(如libpng
)时,我们需要保证编译器:
#include
能找到png.h
,因此需要加入include directories设定;- 链接(link)的时候能找到
libpng.o
(或其他后缀); - 如果是动态链接,还要在运行时能找到
libpng.so
或libpng.dll
动态链接库。
这一系列操作可以手动完成,也可以用包管理器+CMake自动配环境。
CMake搜索库的位置主要依靠find_package()
函数实现,该函数需要正确安装libpng到常用位置。
我们提供几个比较典型的配置方案供参考。
FetchContent
是CMake提供的一个自动下载其它库源代码的Module,类似的Module还有ExternalProject
。
在作业的CMakeLists.txt
中,将以下代码
find_package(PNG REQUIRED)
include_directories(${PNG_INCLUDE_DIR})
target_link_libraries(main ${PNG_LIBRARY})
替换为
# 在系统中寻找libpng
find_package(PNG QUIET)
if(NOT PNG_FOUND)
message(STATUS "libpng not found, we will download it")
# 没找到,我们从源码编译
include(FetchContent) # 引入FetchContent Module
FetchContent_Declare(
zlib # zlib是libpng的依赖,我们引入zlib
GIT_REPOSITORY https://gitee.com/mirrors/zlib.git # 为了保证国内可连接性,我们使用gitee的镜像
GIT_TAG 09155eaa2f9270dc4ed1fa13e2b4b2613e6e4851 # 版本:1.3
)
FetchContent_Declare(
libpng
GIT_REPOSITORY https://gitee.com/mirrors/libpng.git
GIT_TAG f135775ad4e5d4408d2e12ffcc71bb36e6b48551 # 版本:1.6.40
)
FetchContent_MakeAvailable(zlib) # 下载zlib
# 设置zlib的头文件和库,让libpng能找到
set(ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR})
set(ZLIB_LIBRARIES zlibstatic)
set(PNG_BUILD_ZLIB ON) # 让libpng知道我们已经下载了zlib
set(SKIP_INSTALL_ALL ON) # 不安装libpng,因为zlibstatic不能安装
FetchContent_MakeAvailable(libpng) # 下载libpng
set(PNG_INCLUDE_DIRS ${libpng_SOURCE_DIR} ${libpng_BINARY_DIR})
set(PNG_LIBRARIES png_static)
# 变量的别名
set(PNG_INCLUDE_DIR ${PNG_INCLUDE_DIRS})
set(PNG_LIBRARY ${PNG_LIBRARIES})
endif()
target_link_libraries(main PRIVATE ${PNG_LIBRARIES})
target_include_directories(main PRIVATE ${PNG_INCLUDE_DIRS})
在上面的代码中,用到了git来下载源代码。如果你没有安装git,也可以使用以下URL下载(链接可能会失效):
FetchContent_Declare(
zlib
URL http://www.zlib.net/zlib13.zip
URL_HASH SHA256=c561d09347f674f0d72692e7c75d9898919326c532aab7f8c07bb43b07efeb38
)
FetchContent_Declare(
libpng
URL https://jaist.dl.sourceforge.net/project/libpng/libpng16/1.6.40/lpng1640.zip
URL_HASH SHA256=0b05310afd15c4f5ccbbae13b4eec4573ee519dc1c76c411c8c10998ea93f107
)
本配置需要Windows系统和Visual Studio。
- 安装Visual Studio最新版(Community版本免费)。 安装时,选择“使用C++的桌面开发”套件。
- 安装vcpkg。
-
打开
cmd
或powershell
,切换到vcpkg目录下:执行安装脚本:
安装libpng:
让Visual Studio能搜索到vcpkg安装的包:
因为网络问题这些命令不总是会成功,请确认以上每一行运行后都没有错误。
-
打开Visual Studio并打开
png
文件夹,这时候应该能直接编译通过。
如果还没编译通过:
- 检查
CMakeLists.txt
是否为最初的版本; - 在Visual Studio的文件列表中,右键
CMakeLists.txt
,删除缓存并重新配置; - 再仔细读一遍以上文档,看是否有要求未满足。
本方案适用于Windows 10/11系统。
- 安装Windows Subsystem for Linux,推荐使用Windows 11+WSL2。
- 安装Visual Studio Code。
- 在VS Code中安装Remote WSL插件,然后用WSL模式打开项目文件夹。
- 后续步骤和“Linux / Mac OS”相同。