windows中打包gtk的问题记录

14-8 打包发布 GTK 程序 为了使 GTK 程序在他人的Windows 系统上运行,需要将该程序进行打包发布。 打包程序的关键只有两步,一,将执行程序需要和动态链接库放置在同一目录;二,设置程序可以直接点击运行,不会同时启用控制台窗口。 1. 放置动态链接库 1)准备工作,新建文件夹用来放置配置文件、执行程序及动态链接库。 2)使用 Listdlls.exe (微软网站下载)查看程序所依赖的动态链接库。具体做法为:在一个控制台下启动 04.config_t... 阅读详情

-ID:/msys64/mingw64/include/pixman-1 -ID:/msys64/mingw64/include/libpng16 -ID:/msys64/mingw64/include/fribidi -LD:/msys64/mingw64/lib -lgtk-4 -lpangowin32-1.0 -lharfbuzz -lpangocairo-1.0 -lpango-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lgraphene-1.0 -lgio-2.0 -lglib-2.0 -lintl -lgobject-2.0

graphene-1.0 link error (lack of libgraphene-1.0.a )
gtk-4 link error (lack of libgtk-4.a )

.a or .dll.a is in lib folder

文章目录

  • 前言

    • 最近准备写一个局域网通信软件, gtk写 windows网络通信
    • 测试打包时发现了一些问题, 一些平台相关的静态链接动态链接的问题
  • 直接问题:

    • 程序移动到另一个windows平台, 找不到库文件问题, 这些库文件都是配置Gtk开发环境时msys下载的Gtk依赖库
  • 解决思路:

    • 1.编译选项使用-static
      但这又出现了link错误: gtk-4 graphene-1.0 没有这样的文件.
      我用Everything一查 明明就有呢 为什么就这两个提示这个错误呢 ? 用Everything与其他Gtk依赖库文件一对比
      发现缺少了它们自身.a的版本(就是静态链接) 只有.dll版本(动态链接)和.dll.a版本(索引dll的符号表)
      image
      我想用什么去除-static对这两个依赖的影响, 意思是唯独这两个动态链接, 其他的库静态链接. 但我不熟悉cmake, 无果
    • 2.打包dll
      尝试之初发现Gtk的这些windows版本的依赖库总起来有100多MB
      image

    我写一个小程序玩玩, 给我占这么多内存?
    我尝试用ldd 打印出程序依赖, 但除了需要的gtk库外还包含windows系统自身的库, 到其他windows平台是不需要这些库的, 好在gtk库和windows库 有明显的区别
    足以让我写一个字符过滤程序, 过滤掉那些有关windows库信息 然后取出gtk库名
    再写一个文件抽取程序, 把那些同名的gtk依赖库 抽取复制到指定的文件夹, 然后再把.exe文件丢到这个文件夹中 -> 压缩 ->丢到没有Gtk开发环境的windows平台 可顺利运行
    很明显这程序很散装, 散装是不能称重的 有待进一步解决…

  • 后续

cmake_minimum_required(VERSION 3.8)
project(test)
#-Wl,--out-implib,libtest.dll.a
#-Wl,-Bstatic -lgtkmm-4.0  -lglibmm-2.68  -lpangowin32-1.0  -lharfbuzz  -lpango-1.0  -lcairo-gobject  -lglib-2.0  -lintl  -lgobject-2.0  -lgio-2.0  -lsigc-3.0  -lcairo  -lpangomm-2.48  -lgiomm-2.68  -lcairomm-1.16  -lpangocairo-1.0  -lgdk_pixbuf-2.0  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -Wl,-Bdynamic -lgtk-4 -lgraphene-1.0
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wl,-Bstatic -lgtkmm-4.0  -lglibmm-2.68  -lpangowin32-1.0  -lharfbuzz  -lpango-1.0  -lcairo-gobject  -lglib-2.0  -lintl  -lgobject-2.0  -lgio-2.0  -lsigc-3.0  -lcairo  -lpangomm-2.48  -lgiomm-2.68  -lcairomm-1.16  -lpangocairo-1.0  -lgdk_pixbuf-2.0  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -Wl,-Bdynamic -lgtk-4 -lgraphene-1.0")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -static")
find_package(PkgConfig)
pkg_check_modules(GTKMM gtkmm-4.0)

include_directories(${GTKMM_INCLUDE_DIRS})
link_directories(${GTKMM_LIBRARY_DIRS})

set(SOURCE_FILES main.cpp Functional.cpp)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wl,-Bstatic -lgtkmm-4.0  -lglibmm-2.68  -lpangowin32-1.0  -lharfbuzz  -lpango-1.0  -lcairo-gobject  -lglib-2.0  -lintl  -lgobject-2.0  -lgio-2.0  -lsigc-3.0  -lcairo  -lpangomm-2.48  -lgiomm-2.68  -lcairomm-1.16  -lpangocairo-1.0  -lgdk_pixbuf-2.0  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -Wl,-Bdynamic -lgtk-4 -lgraphene-1.0")

add_executable(test WIN32  ${SOURCE_FILES})

set(CMAKE_EXE_LINKER_FLAGS "-Wl,-Bdynamic -lgtk-4 -lgraphene-1.0")
target_link_libraries(test ${GTKMM_LIBRARIES})

编译能过但是没有效果…
这很奇怪, 好像clion有学习能力一样
从某些方面来看这玩意比vs2022还难搞
https://download.gnome.org/binaries/win64/gtkmm/
https://www.cnblogs.com/findumars/p/7483945.html
我在这里找到了答案: https://www.reddit.com/r/rust/comments/tl8wzk/forced_static_linking/

Limo GTK开发第三步:打包并安装你的程序 每次都要用telnet命令行运行是不是有点不爽,那就打包成ipk,在手机中安装使用吧:一、打包先来看看ipk的结构(参考euzen博文:http://hi.baidu.com/euzen/blog/item/0666b4dea38742d78c102942.html)包目录test下包含两个目录1.目录DEBIAN内含文件control,内容如下,括号内为备注:Source: test      (显示在桌面的名称)Section: Utility   Package: cn.iEnzo.test     阅读详情

相关推荐

qt程序打包(5) linux(UOS)应用程序图标以及 文件关联应用程序

上面几行相近的语句是把不同大小的文件图标放到合适的位置,并将名字改为:application-x-ab,与xml中的名字对应,改图片大小的网站:改图宝。图标: https://blog.youkuaiyun.com/nahancy/article/details/126079402。(1)需求:双击某一类文件时可以自动打开我的应用程序,并且让文件显示应用程序的图标(例如文件后缀为.ab)然后重新生成deb包,再安装就会发现文件有图标了,也能点击文件进入程序了。二、文件与程序关联并。...

qq_41104439的博客 1594

Rust之linux for windows 交叉编译gtk-rs

软件包安装适用于arch,但对于其他发行版应该类似。首先使用rustup正常安装rust。下一步将安装windows工具链。vim~/.cargo/config插入以下内容,没有这个文件新增即可现在安装mingw和gtk库,需要一段时间ArchLinuxmingw包位于AUR中,您可以手动安装或使用帮助程序。这些说明使用pacaur助手。这些包需要一些时间来编译。...............

每天进步一点点 1997

使用Zig与GTK4构建现代化SSH密钥密码输入工具

在系统编程与图形界面开发领域,C语言与GTK工具包一直是构建原生应用的核心技术组合。其原理在于通过直接调用系统API与图形库,实现高性能、低资源占用的应用程序。随着现代编程语言的发展,开发者开始寻求在保持性能优势的同时,提升开发安全性与体验的新方案。Zig语言以其卓越的C互操作性、编译期计算和明确的内存管理,为系统工具开发提供了新的选择。结合GTK4的现代API与跨平台能力,能够高效构建安全可靠的桌面应用。这一技术组合在需要图形化交互的系统工具场景中价值显著,例如SSH密钥管理、身份验证对话框等。本文聚焦于

weixin_34323858的博客 408

Python使用Pygtk和Py2exe打包遇到的问题

最近花了一天的时间使用Pygtk开发了一个下载器Demo,这个小工具也可以认为是在线升级的原始模型,功能很简单,根据配置文件的Url地址下载数据到本地。 之前一直都没有接触过gtk编程,好在高中时就开始用VB写Winform程序,有事件触发机制编程的基础,因此上手写程序比较顺利,可是在打包部署时却遇到了不少的小麻烦。 恩,本篇文章不是介绍怎么开发这样的工具,而是介绍以下2个主题:一、如何在wi...

CleverDeng时光 - 记录、分享...... 228

Electron跨平台打包避坑:为什么Windows不能直接打Linux包?从原理到Docker实战

本文深入解析Electron跨平台打包的核心问题,揭示Windows无法直接构建Linux包的技术原理(ABI不兼容),并提供基于Docker的实战解决方案。通过electron-builder工具链和标准化容器环境,开发者可高效实现多平台打包,特别适合需要支持x86_64、arm等不同架构的场景。

weixin_29231027的博客 214

Unity应用银河麒麟打包实战:从构建到deb/rpm安装包全流程

软件打包是将开发完成的应用转换为可分发、易安装格式的关键环节,其核心原理在于遵循目标操作系统的文件结构和包管理规范。在Linux生态中,这尤其重要,因为它确保了应用依赖的正确解析和系统的整洁管理。对于希望在国产化平台部署应用的开发者而言,掌握deb和rpm包的构建技术具有重要价值,它能直接助力软件进入政企、金融等信创市场。本文将聚焦于Unity引擎开发的应用,详细阐述其在银河麒麟操作系统上的完整打包流程。这个过程涉及Unity的跨平台构建、处理系统运行时依赖,以及使用dpkg-deb、rpmbuild或fp

aoe41606的博客 429

Win10安装gotk3记录

环境:win10 Home; go1.11.2 windows/amd64 步骤(https://github.com/gotk3/gotk3/wiki/Installing-on-Windows): 1. Git 略 2.MinGW 这个有些‘坑’,按作者提的sourceforge上的mingwbuilds和mingw-w64都试了都不行。最后参考这里:https://github....

big_cheng的博客 1343

告别Windows限制:用.NET 6和GTKSystem.Windows.Forms实现Winform跨平台开发(附完整配置流程)

本文详细介绍了如何利用.NET 6和GTKSystem.Windows.Forms实现Winform应用的跨平台开发,覆盖从环境配置到项目迁移、控件兼容性调整以及构建部署的全流程。特别针对Linux和Mac平台提供了实用解决方案,帮助开发者突破Windows限制,扩展应用运行环境。

weixin_29224529的博客 420

Blue Recorder架构深度解析:Rust + GTK4 + FFmpeg如何协作打造跨平台录屏器

Blue Recorder 是一款用 Rust 编写的跨平台录屏器(屏幕录制工具),它基于 Green Recorder 重写,通过 GTK4 图形界面 + FFmpeg 编码引擎的组合,在 Windows、Linux(X11/Wayland)与 FreeBSD 上实现窗口、区域与全屏录制。这篇文章带你深入它的源码架构,看看录屏器内部的"分工协作"是如何设计的,适合想了解桌面应用架构的新手阅读。

gitblog_00204的博客 324

Gedit Windows版开源文本编辑器实战使用指南

Gedit 看似简单,实则处处体现工程智慧:✅轻量而不简陋:界面简洁,但功能可通过插件无限扩展。✅跨平台而不断裂:通过静态捆绑 + MSI 部署,实现 Windows/Linux 一致体验。✅智能而非花哨:缩进、空格、高亮等功能紧扣开发者真实痛点。✅开放且可定制:XML 语言定义、CSS 主题、插件 API 全部开放。它不像 VSCode 那样追求“全能”,也不像 Vim 那样要求“精通”。它的定位很清晰:一个值得信赖的日常编码伴侣。

weixin_35755562的博客 1218

gtk资料打包

gtk资料打包 gtk资料打包 gtk资料打包 gtk资料打包 gtk资料打包 gtk资料打包 gtk资料打包

一文吃透 java-cef 的跨平台构建部署:Windows、Linux、macOS 三端从零发布实战

java-cef(Java Chromium Embedded Framework,简称 JCEF)能把完整的 Chromium 浏览器内核嵌入 Java 桌面程序,让同一套 Web 界面在 Windows、Linux、macOS 三端原生运行。本文以"给运维团队打造一个内嵌 Web 界面的控制台客户端"为贯穿示例,带你走完从环境准备、三平台构建到打包发布的完整跨平台构建部署流程,读完即可照做。

gitblog_01013的博客 1150

GTK+3.0需要的dll全在里面啦(Windows运行)

上传者很懒。。

失败经历--在windows下安装meld

缘起 在linux下,最早用的比较工具是vim,这是作为一个vimer的自尊(其实没有关系吧)。终于有一天,在比较同一个项目的两个版本的时候,比较了两三个文件后,看着vim里面花花绿绿的颜色,实在是受不了了。而且比较的结果也让人迷惑。两边明明是一样的,却显示为不一样。我决定另寻出路。 在git中,推荐的比较工具是meld,那就这个好了,也不管是不是因为是不是按照字母序排的。 一用之...

a294049792的博客 802

qt+gtk打包dll.rar

在qt上跑gtk程序,结合了qapp的界面,程序写好之后使用qt常规的方式windeployqt打包无效,缺少一堆dll,后把程序拖入到msys2的mingw64.exe中可执行,但是在其他电脑还得装msys2的mingw64,麻烦,所以整理了qt+gtk组合所需的所有dll,新release程序编译好之后只需把exe拖入文件中即可双击执行

攻克JESD204B多ADC同步:从时钟对齐到数据对齐的实战解析

本文深入解析了JESD204B多ADC同步的系统性挑战与实战解决方案。从确保设备时钟同源、精确捕获SYSREF信号,到管理接收端弹性缓冲区与释放点,文章提供了从时钟对齐到数据对齐的完整调试路径与排查清单,是攻克高速数据采集系统中多片ADC同步难题的实用指南。

weixin_29231725的博客 197

从源码到分发:darktable全平台打包部署指南

你还在为开源照片处理软件darktable的跨平台分发烦恼吗?本文将系统讲解如何通过AppImage实现Linux一键部署,并覆盖Windows、macOS及Ubuntu的打包流程,让你的摄影工作流工具无缝抵达所有用户设备。读完本文你将掌握: - AppImage单文件打包的核心配置与运行机制 - Windows NSIS安装包制作的完整步骤 - macOS应用签名与DMG镜像生成技巧 - Ubu...

gitblog_01010的博客 531

Transformer-Based Attention Networks for Continuous Pixel-Wise Prediction 基于Transformer注意力网络连续像素级与估计

Transformer-Based Attention Networks for Continuous Pixel-Wise Prediction 基于Transformer注意力网络的连续的像素级的

MengYa_Dream的博客 4716

python可以封装成独立程序吗_把 python 文件打包成独立 exe 可执行文件

D:\WorkSpace3\EXAMPLE\AATT>pyinstaller -F AATT.py66 INFO: PyInstaller: 3.466 INFO: Python: 3.6.669 INFO: Platform: Windows-10-10.0.15063-SP075INFO: wrote D:\WorkSpace3\EXAMPLE\AATT\AATT.spec76 INFO: U...

weixin_39929259的博客 356

Unity-Chan Toon Shader卡通渲染学习

2.0 (UTS2)是一款用于图像和视频的卡通着色器,旨在满足从事卡通着色 3DCG 动画的创作者的需求。二、从0-1复刻UTS21.漫反射UTS2的漫反射部分主要有三个层组成,分别是基本颜色、第一阴影色和第二阴影色,分别对应着美术理论中的白、灰、黑。

qq_63133691的博客 2539

ENVI5.6 自动化流程:GF系列卫星影像批处理与质量优化

本文详细介绍了如何利用ENVI5.6构建针对GF-2、GF-6、GF-7系列卫星影像的自动化批处理流水线。通过配置Batch Processing工具,实现从正射校正到图像融合的全流程批量处理,并分享参数设置、质量监控与故障排查的实战经验,旨在显著提升海量遥感影像的处理效率与成果质量。

efc1234567的博客 603
上一篇: gtkmm xml ui 例子(from string)
下一篇: Cambalache in Ubuntu
Computer_Tech
博客等级 码龄3年 573粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值