GLib
为 C 语言编写的库和程序提供了核心应用程序组件。它提供了 GNOME 中使用的核心对象系统, main 循环的实现以及操作字符串和常用数据结构的一整套工具函数。
1. 依赖软件
CMake
Visual Studio
Visual Studio 2013
Visual Studio 2015
Visual Studio 2017
Visual Studio 2019
Visual Studio 2022
如果链接失效,自行解决。
MSYS2
2. 环境搭建
MSYS2
安装- 安装目录
- 安装完成启动程序
- 输入
pacman -Syu
更新初始环境,完成后环境会自动关闭 - 从
开始菜单\MSYS2 64bit\MSYS2 MSYS
启动环境 - 输入
pacman -Su
,更新包 - 安装依赖库和必须的工具
pacman --needed --noconfirm -S automake autoconf make libtool unzip glib2-devel intltool pcre-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-pcre
- 可选工具用于生成文档
pacman --needed --noconfirm -S gtk-doc ```![\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tky4zUJO-1651330062146)(image-20220430173848613.png)\]](https://img-blog.csdnimg.cn/52b0d7d1d95449468034edaddc975659.png#pic_center)
- 安装
meson
编译工具pacman -S mingw-w64-x86_64-meson ```
- 将
C:\msys64\mingw64\bin
与C:\msys64\mingw64\lib
添加到系统环境变量
- 安装目录
3. 源码编译
GLib
源码下载- 将源码解压到
C:\glib-2.72.1
- 从
开始菜单
打开MINGW X64
终端
- 切换到
C:\glib-2.72.1
- 生成编译配置
meson build --prefix=/c/glib2
- 执行编译
ninja -C build
- 执行安装
ninja -C build install
- 安装结果
4. Visual Studio 2013 测试
- 使用
VS2013
创建空的控制台工程,命名为glib2_vs
- 头文件目录配置
- 库文件目录配置
- 链接库配置
- 源码
#include <iostream > #include <glib.h > #include <glib/gprintf.h > int main(int argc, char * argv[]) { gchar ch[128]; g_sprintf(ch, "hello world"); // 倒序排列 std::cout << g_strreverse(ch) << std::endl; return 0; }
- 效果
5. CMake 测试
- 测试代码
与VS的测试代码相同 - CMake 文件
# 指定最低的CMAKE版本 CMAKE_MINIMUM_REQUIRED(VERSION 3.14 FATAL_ERROR) # 创建项目 PROJECT(glib2_examples LANGUAGES CXX) # 指定CPLUSPLUS标准 SET(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_CXX_STANDARD 11) SET(CMAKE_C_STANDARD 11) SET(CMAKE_C_STANDARD_REQUIRED ON) MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}") INCLUDE_DIRECTORIES(CMAKE_CURRENT_SOURCE_DIR) INCLUDE_DIRECTORIES(C:/glib2/include) INCLUDE_DIRECTORIES(C:/glib2/include/glib-2.0) INCLUDE_DIRECTORIES(C:/glib2/lib/glib-2.0/include) LINK_DIRECTORIES(C:/glib2/lib) LINK_LIBRARIES(libgio-2.0.dll.a) LINK_LIBRARIES(libglib-2.0.dll.a) LINK_LIBRARIES(libgmodule-2.0.dll.a) LINK_LIBRARIES(libgobject-2.0.dll.a) LINK_LIBRARIES(libgthread-2.0.dll.a) MESSAGE(STATUS "###################################") ADD_EXECUTABLE(glib_demo main.cpp)
- 执行生成后,出现一下错误
由上图可以看出,CMake
在链接库文件时,如果指定的库文件不是以.lib
结尾,则自动添加上.lib
后缀,这样导致找不到正确的链接库文件 - 将库的链接方式由
link_libraries
修改成target_link_libraries
# 指定最低的CMAKE版本 CMAKE_MINIMUM_REQUIRED(VERSION 3.14 FATAL_ERROR) # 创建项目 PROJECT(glib2_examples LANGUAGES CXX) # 指定CPLUSPLUS标准 SET(CMAKE_CXX_STANDARD_REQUIRED ON) SET(CMAKE_CXX_STANDARD 11) SET(CMAKE_C_STANDARD 11) SET(CMAKE_C_STANDARD_REQUIRED ON) MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}") INCLUDE_DIRECTORIES(CMAKE_CURRENT_SOURCE_DIR) INCLUDE_DIRECTORIES(C:/glib2/include) INCLUDE_DIRECTORIES(C:/glib2/include/glib-2.0) INCLUDE_DIRECTORIES(C:/glib2/lib/glib-2.0/include) MESSAGE(STATUS "###################################") ADD_EXECUTABLE(glib_demo main.cpp) target_link_libraries(glib_demo PRIVATE C:/glib2/lib/libgio-2.0.dll.a) target_link_libraries(glib_demo PRIVATE C:/glib2/lib/libglib-2.0.dll.a) target_link_libraries(glib_demo PRIVATE C:/glib2/lib/libgmodule-2.0.dll.a) target_link_libraries(glib_demo PRIVATE C:/glib2/lib/libgobject-2.0.dll.a) target_link_libraries(glib_demo PRIVATE C:/glib2/lib/libgthread-2.0.dll.a)