【GLib2】Windows平台源码编译

GLib 为 C 语言编写的库和程序提供了核心应用程序组件。它提供了 GNOME 中使用的核心对象系统, main 循环的实现以及操作字符串和常用数据结构的一整套工具函数。

1. 依赖软件

2. 环境搭建

  • MSYS2安装
    • 安装目录
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7WcqPV3p-1651330062142)(image-20220430162440860.png)]
    • 安装完成启动程序
      在这里插入图片描述
    • 输入pacman -Syu更新初始环境,完成后环境会自动关闭 在这里插入图片描述
    • 开始菜单\MSYS2 64bit\MSYS2 MSYS启动环境 在这里插入图片描述
    • 输入pacman -Su,更新包 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-66vnLvGB-1651330062145)(image-20220430163359622.png)]
    • 安装依赖库和必须的工具
      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
      ```![在这里插入图片描述](https://img-blog.csdnimg.cn/cef816d4945641ad9257db98b1e6ea4f.png#pic_center)
      
    • C:\msys64\mingw64\binC:\msys64\mingw64\lib添加到系统环境变量
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmls9snE-1651330062147)(image-20220430175127264.png)]

3. 源码编译

  • GLib源码下载
  • 将源码解压到C:\glib-2.72.1
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z9Vj50w7-1651330062148)(image-20220430180036324.png)]
  • 开始菜单打开MINGW X64终端
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TcGXANM4-1651330062149)(image-20220430180155640.png)]
  • 切换到C:\glib-2.72.1
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kGvQBHpR-1651330062149)(image-20220430180837278.png)]
  • 生成编译配置
    meson build --prefix=/c/glib2
    
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SuLWxHDA-1651330062150)(image-20220430181045792.png)]
    在这里插入图片描述
  • 执行编译
    ninja -C build
    
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7p6eGrR-1651330062151)(image-20220430181633585.png)]
  • 执行安装
    ninja -C build install
    
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2C9NE4W-1651330062151)(image-20220430183938535.png)]
  • 安装结果
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-prk24q7U-1651330062151)(image-20220430184020646.png)]

4. Visual Studio 2013 测试

  • 使用VS2013创建空的控制台工程,命名为glib2_vs
  • 头文件目录配置[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ODTPnEVZ-1651330062152)(image-20220430191228067.png)]
  • 库文件目录配置
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m3zKlxGj-1651330062152)(image-20220430191346319.png)]
  • 链接库配置
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aIqJ5Tum-1651330062153)(image-20220430191510713.png)]
  • 源码
    #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;
    }
    
  • 效果
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-igGiLaay-1651330062153)(image-20220430191722847.png)]

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)
    
  • 执行生成后,出现一下错误
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFnK2Rsk-1651330062154)(image-20220430193551856.png)]
    由上图可以看出,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)
    
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhy29563

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值