首页
学习
活动
专区
圈层
工具
发布

【Rust GUI开发入门】编写一个本地音乐播放器(14. 应用打包-制作安装程序)

本系列教程对应的代码已开源在 Github zeedle本篇文章介绍如何打包所编写的音乐播放器!为什么要打包?...cargo-bundle,因为我用这个没有打包成功cargo install cargo-packager指定打包配置在Cargo.toml中添加:[package.metadata.packager]...[package.metadata.packager.nsis]installer-icon = "ui/cover.ico" # 指定安装包使用这个图标这里需要的.dll文件,在linux下可以用...ldd查找,在Windows下可以用dumpbin查找,dumpbin存在于Developer PowerShell for VS xxxx中,可以直接打开这个shell使用:dumpbin /dependents...xxx.exe进行打包cargo packager --release生成的文件将被存放到target/release目录下。

18410

C++静态链接

VISUAL C++ 编译器做法稍有不同,它把这种类型的段叫做“ COMDAT”,这种“ COMDAT”段的属性字段(PE文件的段表结构里面的 IMAGE SECTION HEADER的Characteristics...当我们须要用到某个目标文件中的任意一个函数或变量时,就须要把它整个地链接进来,也就是说那些没有用到的函数也被一起链接了进来。...当链接器须要用到某个函数时,它就将它合并到输出文件中,对于那些没有用的函数则将它们抛弃。这种做法可以很大程度上减小输出文件的长度,减少空间浪费。...C++与ABI 既然每个编译器都能将源代码编译成目标文件,那么有没有不冋编译器编译出来的目标文件是不能够相互链接的呢?...有没有可能将MSVC编详出来的目标文件和GCC编译出来的目标文件链接到一起,形成一个可执行文件呢?

2.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    记一次调试资源管理器未响应经验

    有小伙伴告诉我一台设备全触摸失效了,但实际上是资源管理器未响应。通过本文可以了解到调试的思路和用到的工具 不要相信测试 测试小伙伴发现,在进行100次开机关机之后,可能会有触摸失效。...如果是全局钩子,那么也点不到任务管理器 所以上面的思路是不对的 实际问题 在任务管理器发现了资源管理器没有响应 也就是实际问题就是资源管理器没有响应,需要了解为什么资源管理器没有响应和可以如何解决 如果这个问题在网上问...,我需要关注一个第三方的应用未响应的只有堆栈和线程 因为老司机告诉我,如果一个程序未响应,在资源管理器看到 CPU 不动,那么原因就是程序在等待。...如果你继续往这条路走,如果失败了,请告诉我你使用的时间 安全模式 在不知道如何调试时,可以使用二分法,因为这是自主研发的设备,那么问题要么在微软的系统,要么在自主开发的软件,要么在自主研发的硬件。...那么这个文件和 mfc90u.dll 有什么联系,我将这个文件夹复制到我的电脑,通过 VisualStudio 的开发者命令行进入我的电脑复制到的文件夹,使用 dumpbin 工具找引用 dumpbin

    1.5K20

    为 .NET Core Framework 程序开启大内存感知(LargeAddressAware),使 32 位程序支持最多 4GB 的用户空间内存

    如果你的项目使用 .NET Framework 框架,那么现行有很多简单的方法来帮你实现大内存感知,但 .NET Core 框架下却没有。...其他开启 LARGEADDRESSAWARE 的方法 不推荐的方法:仅适用于 .NET Framework 的旧方法 当时的那篇博客中,我提到过可通过编译成 AnyCPU (Prefer 32-bit)...方法是修改 csproj 文件,加上这两句: 1 2 3 4 5 ++ <!...检查是否已开启大内存感知 我在之前的博客中提到可以使用 Visual Studio 自带的 dumpbin 工具来检查是否开启了大内存感知: 1 dumpbin /headers xxx.exe | more...但是,我们有更直观的 dnSpy 为什么还要用命令行来临时查看呢?

    1.5K10

    编译优化在微信视频号的落地实践

    comdat的消除出现不同的结果,原因是externally_visable变量在使用时还没有更新到预期的值,因此调整update_visibility_by_resolution_info中的检查函数来消除节点访问顺序造成的影响...二进制文件大小的优化编译得到的mmfinderrecommend_1117_O2_PUSE二进制文件大小为2.6G,尽管相对于最初的GCC10 O2+LTO的3.6G减小了1G,还是显得有点大,分析二进制文件的具体内容可以发现...debug信息占了将近90%的内容,binutils中的objcopy提供了一个压缩功能选项: objcopy --compress-debug-sections [xxx] [xxx.gz] 对二进制文件中的...DWARF块进行zlib压缩,可以再次大幅减小二进制文件到1.2G。...在视频号模块上我们成功的实现了版本升级适配以及20%的综合性能提升,优化后的二进制文件大小减少了80%,显著的改进了部署效率。

    88610

    mold源码阅读 其一 读取输入文件

    首先是解析输入,命令行参数解析的细节略过,但是这里不能略过elf文件的解析。我们从代码的实现去看elf的结构,再和文档中的图进行对比,同时尽可能从代码中去捋清不同结构之间的联系。...就是这些,但是注意,GitHub中mold项目下只存在elf文件的支持,mach的格式则是在sold这个项目中处理。...linker script mold的linker script根据解析的过程来看比较简单,没有在ld的脚本中的指定SECTION地址之类的内容,主要是对format以及符号version的一些控制。...| … | 关于GRP_COMDAT文档中也有提到 This is a COMDAT group....esym则是ElfSym的缩写,也就是Elf文件中的Symbol定义,而Symbol则是mold中自己定义的,相当于转换为自己想要的格式。

    1.8K20

    密集计算场景下的 JNI 实战

    JNI 是一种标准的程序接口,用于编写 Java 本地方法,并且将 JVM 嵌入 Native 应用程序中。是为了给跨平台上的 JVM 实现本地方法库进行二进制兼容。...然而项目组目前也没有 JNI 的实践经验,最终性能是否能有提升,还是要打个问号。本着初生牛犊不怕虎的精神,我鼓起勇气主动认领了这个优化任务。...下编译在 windows 上运行,这是不可以的); JVM 位数和 lib 的位数不一致 (比如一个是 32 位,一个是 64 位); C++ 函数名写错; 生成的 lib 文件中并没有相对应的方法。...在 windows 下,可以使用 dumpbin 工具或者 Dependency Walker 工具分析 lib 中是否存在所编写的 C++ 方法。...dumpbin 指令如下: dumpbin /EXPORTS xxx.dll 而 Dependency Walker 只需要打开 dll 文件就可以看到相关信息了。

    88120

    PE文件和COFF文件格式分析——节信息

    而我们本文讨论的节信息是没有任何偏移指向的,所以它是紧跟在可选文件头后面的。...但是我这儿说一下,这样做是不严谨的,我会在之后论述这样草率的做法为什么不对。         我先拿我电脑上notepad.exe为例,看看它的节信息 ?        ...这个数字是相对字符串表起始位置的偏移RA,我们的真实的节名就保存在字符串表中。我在我电脑上找到一个这样的文件avcodec-52.dll。我们先看Stud_PE的分析结果 ?        ...目前微软推荐是:将映像文件调试符号表信息独立的放在PDB文件中,所以不会在PE文件中再保存调试符号表信息,于是这个字段应该为0。当然这并不是硬性要求,我发现我电脑上就存在很多该字段不为0的文件。...刚开始时我也不是很明白它们为什么要使用这个字段,特别是其指向的字符表个数(NumberOfSymbols)为0!!你说既然大小为0,那你指向有什么意思呢?

    90820

    12、动态链接库,dll

    2、静态库与动态库: 静态库: 函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。...动态库: 动态库一般提供两个文件:一个引入库(.lib),一个是DLL(.dll)文件。.lib文件中包含该DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。...在使用动态库情况下,在编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL,将该DLL映射到进程的地址空间中...图示 P703 两个进程访问同一个DLL时的情形 两种加载dll文件的方式,隐式加载和显式加载。 3、Dumpbin命令 应用程序如果想要访问某个DLL中的函数,那么该函数必须是已经被导出的函数。...并在工程属性的链接器的命令行中输入lib符号名文件。把dll文件和lib文件放入指定目录中在工具选项的VC++目录中包含。 (2)利用_declspec(dllimport)于外部函数声明前。

    1.4K20

    Windows下程序打包发布时的小技巧

    但是实际操作起来并不理想,因为Dependency Walker将exe文件依赖的所有动态库以及动态库所依赖的动态库都列出来了。看得你一脸懵逼: ?    ...你很难分清楚:倒底哪些DLL是需要打包的,哪些DLL是系统自带的。而作为打包过程中的一个小步骤,我根本不需要知道这么多信息。这个时候,我们需要一个更加简洁明了的工具。...dumpbin就是今天要介绍的主角。 二、使用     dumpbin是随Visual Studio一起发布的,在Visual Studio的“本机工具命令行”中就可以直接使用。...使用的第一步就是打开Visual Studio的“本机工具命令行”: ?     这里我选择的是“VS2015 X64本机工具命令提示符”。...三、小结     dumpbin的IMPORTS参数是用来查看程序依赖的其他动态库的,这对于可执行程序exe和动态链接库DLL都是适用的。

    2.3K60

    系列文章(二)| VS2013-MPI v7-静态编译-Boost1.6.1

    注:bjam在编译过程中,出错不会停下来,而是直接跳过出错的模块,除非加参数让其遇错停下.而且是边编译边安装....headers *.lib | findstr machine dumpbin/headers *.dll | findstr machine 间接确定某个lib是静态还是动态[会显示其它信息或者对应的...dll] dumpbin/headers *.lib 直接确定某个lib是静态还是动态[会列出包含的obj或者对应的dll] lib /list*.lib 8 Boost安装目录分析 ?...[include]文件夹装的是包含目录,D/R版本的内容完全一样. [lib]文件中,装的都是staticlib文件,D/R版本各有34个lib. lib一一对应,但内容不一样....控制台编译,没有生成PDB. 因为是静态编译,所有没有dll,也没有[bin]文件夹. 静态编译通常没有PDB. ?

    1K30

    为什么要在WebAssembly中使用Rust?【Programming】

    WebAssembly是二进制文件格式,所有主要浏览器(IE 11除外)都已实现,以使虚拟机运行。...因为这些语言具有必须包含在WebAssembly二进制文件中的大型运行时,所以它们仅对新建项目才真正实用(即,它们仅可用作JavaScript替代品)。...然而,Rust使用我们将在本系列其他文章中探讨的工具,很容易创建具有相当惯用的JavaScript接口的WebAssembly二进制文件,而c和c++中的过程则更加手动。...如果你有兴趣了解更多关于Rust的Wasm开发,请在评论中告诉我。接下来,我将介绍如何从JavaScript调用Rust。...如果你想对比一下Rust的故事和其他语言的故事,比如c语言和Go语言,请告诉我,以后我会写更多。

    1.7K00

    白加黑免杀制作(详细)

    前言 最近被微步的一篇文章吸引了,里面讲到银狐通过自解压白 exe + 黑 dll 执行截取主线程添加自启动,发现 dll 与普通的免杀有很大的不同,决定自己尝试一下,虽然我之前没有做过白加黑免杀,感觉应该不会太难...文件、lib 库、dll 库、exe 执行文件,使用方法如下: # 查看 dll 库中包含哪些函数 dumpbin /exports a.dll # 查看 exe 中加载了哪些动态库 dumpbin.../imports a.exe # 查看 lib 库中包含哪些函数 dumpbin /all /rawdata:none a.lib # 查看 obj 文件中包含哪些函数 dumpbin /all /rawdata...1. dll 文件的搜索路径顺序 dll 加载如果指指定了 dll 文件名而没有指定具体路径一般是按照一定的路径顺序一次去搜索,如果能在搜索到正确的 dll 之前使其先搜索到我们的恶意 dll 就能造成...由于我主机上没有安装 ProcessMonitor,因此我需要将 exe 拖到虚拟机中执行。

    12.3K92

    使用 shell 脚本自动对比两个安装目录并生成差异补丁包

    问题的解决 其实这个问题用 c++ 写个程序是可以解决的,但是一想到要遍历目录、构造文件名 map、对比两个目录中的文件名、对比相同文件名的内容、复制文件到目标目录、压缩目标目录…这一系列操作时,我觉得还是算了...这里没有通过文件后缀(dll / exe)来判断是否为可执行文件,这是因为产品中总有一些 dll 有奇奇怪怪的后缀。...这里统一采用 dumpbin 进行反汇编,如果成功就是可执行文件;反之就是普通的文本或二进制文件。...后来他们通过紧急补丁修复了上述问题,在后面复盘问题的过程中,我手动检查了脚本的运行日志,发现确实没有识别出新旧 derived.dll —— 脚本认为它们是二进制相同的。...上面这个例子中,父类的成员变化后,肯定会有相应的 section 会做出调整,但是我通过调整 dumpbin 的选项也没有对比出这个段在哪里。

    79340

    安防教育互联网直播视频组件EasyRTSPServer读取本地文件报错找不到EasyStreamClient.dll解决方法

    与代码中设置的libEasyStreamClient.dll不符合。 ? 我们查找文件,发现可执行文件同目录下存在对应的libEasyStreamClient.dll文件。 ?...这里libEasyStreamClient.lib只是影响编译器编译的时候,link.lib库的问题,和运行时没有任何关系。此时仅仅告诉系统当程序运行时,需要加载这个.dll文件。...通过dumpbin 命令来查看对应的dll dumpbin /headers libEasyStreamClient.lib ?...由此可以看到,这个的DLL Name是EasyStreamClient.dll。所以可执行文件运行时,需要的动态库为EasyStreamClient.dll。...修改路径:属性->输入->模块定义文件 EasyStreamClient.def ? EasyStreamClient.def 中定义了DLL Name ?

    48032
    领券