递归火山软件开发平台

标题: 火山PC生成一个空的MFC程序4MB还多 [打印本页]

作者: ADS    时间: 2021-3-11 00:23
标题: 火山PC生成一个空的MFC程序4MB还多
火山PC生成一个空的MFC程序4MB还多,为何VS2019只有100KB不到,一个空的体积为什么这么大,怎么解决

作者: ziv    时间: 2021-3-11 07:48


作者: 0晨鹤0    时间: 2021-3-11 11:03
应该是把所有ui库,无论有没有用到全部打包进去了。反正现代设备来说,4M的pc程序可以接受。
作者: 67564226    时间: 2021-3-11 11:13
本帖最后由 67564226 于 2021-3-11 11:14 编辑

4M还好,关键还带一堆的DLL 这些DLL体积也不小啊,  
易语言早期的时候,也是这样的,编译的时候,把用到支持库全打包进去,导致体积超级的大,

后期好像有了静态编译后,才解决了这个问题。

作者: 飞扬工作室    时间: 2021-3-11 11:23
默认是静态编译,你在项目选项中把"火山模块连接方式"设置为"动态",把"使用静态C++运行时库"设置为假,就会发现结果也不到100KB,只是你把结果EXE拿到别处使用的话,就要带上一堆系统动态库了.
作者: shuimiao    时间: 2021-3-11 12:16
飞扬工作室 发表于 2021-3-11 11:23
默认是静态编译,你在项目选项中把"火山模块连接方式"设置为"动态",把"使用静态C++运行时库"设置为假,就会发 ...

就算是静态链接也不至于空窗口4M吧,或者这个静态链接是把相关库都链接进去,而不是按需链接?能不能像易语言一样按需链接?
作者: shuimiao    时间: 2021-3-11 12:22
飞扬工作室 发表于 2021-3-11 11:23
默认是静态编译,你在项目选项中把"火山模块连接方式"设置为"动态",把"使用静态C++运行时库"设置为假,就会发 ...

时钟例程,我把火山模块连接方式设置为动态后,调试运行,就自动退出了,进不了界面。而如果直接生成后去软件目录下打开就正常。64位
作者: 飞扬工作室    时间: 2021-3-11 13:17
shuimiao 发表于 2021-3-11 12:16
就算是静态链接也不至于空窗口4M吧,或者这个静态链接是把相关库都链接进去,而不是按需链接?能不能像易 ...

你可以用vc试一下,把运行时库和mfc类库均设置为静态链接,结果和火山是一样的.
作者: 飞扬工作室    时间: 2021-3-11 13:17
shuimiao 发表于 2021-3-11 12:22
时钟例程,我把火山模块连接方式设置为动态后,调试运行,就自动退出了,进不了界面。而如果直接生成后去 ...

好,我检查一下

作者: 飞扬工作室    时间: 2021-3-11 14:29
shuimiao 发表于 2021-3-11 12:22
时钟例程,我把火山模块连接方式设置为动态后,调试运行,就自动退出了,进不了界面。而如果直接生成后去 ...

我这里检查没有问题,估计是你设置为动态链接运行时库后没有提供对应的正确运行时库的原因.
作者: zhqyong    时间: 2021-3-11 15:21
原来如此
作者: shuimiao    时间: 2021-3-11 18:36
飞扬工作室 发表于 2021-3-11 14:29
我这里检查没有问题,估计是你设置为动态链接运行时库后没有提供对应的正确运行时库的原因. ...

这个还要我自己提供动态运行时库吗,不是应该编译时把需要用到的各种dll都写到编译目录下?自己提供都不知道需要哪些
作者: 朕的    时间: 2021-3-11 22:14
飞扬工作室 发表于 2021-3-11 11:23
默认是静态编译,你在项目选项中把"火山模块连接方式"设置为"动态",把"使用静态C++运行时库"设置为假,就会发 ...

有个疑问,假设主程序使用静态方式编译,主程序再调用开发的动态编译dll,这样就可以减少dll的大小。但是不知道在别的机器上,会不会报错。简单来说 就是主程序是静态编译打包了 运行库,dll不打包进去运行库,这样在没有安装运行库的机器上会不会报错?
作者: 飞扬工作室    时间: 2021-3-11 22:31
朕的 发表于 2021-3-11 22:14
有个疑问,假设主程序使用静态方式编译,主程序再调用开发的动态编译dll,这样就可以减少dll的大小。但是 ...

会,这样最好动态编译,然后把vc运行时库和mfc运行时库都带上,这样exe和dll就都能使用这两个库了.
作者: 朕的    时间: 2021-3-11 22:42
飞扬工作室 发表于 2021-3-11 22:31
会,这样最好动态编译,然后把vc运行时库和mfc运行时库都带上,这样exe和dll就都能使用这两个库了. ...

主程序静态编译了,引用了c++和MFC库,dll不需要静态编译了吧?dll动态编译不行吗?
作者: 飞扬工作室    时间: 2021-3-11 22:44
不行
作者: hmyroot    时间: 2021-3-12 01:56
我建议出一个像【黑月编译】的界面库,全部采用API画出界面,不使用任何MFC界面库,这样编译出来的程序轻巧又不需要带一堆dll,黑月编译是按需要用到的函数才编译进去程序里面的,火山PC应该也可以的,思路改变一下
作者: 67564226    时间: 2021-3-12 13:23
hmyroot 发表于 2021-3-12 01:56
我建议出一个像【黑月编译】的界面库,全部采用API画出界面,不使用任何MFC界面库,这样编译出来的程序轻巧 ...

不带DLL估计肯定是不可能的, 在你选择使用支持库的时候,每选择一个模块或支持库,到时候你编译的时候,就多一个DLL   你想像中的像易语言一样,一个exe搞定的现像有点难度,  估计要把所有用到的支持库和模块的源码复制到一个里面才能搞定吧 。
作者: 飞扬工作室    时间: 2021-3-13 20:28
hmyroot 发表于 2021-3-12 01:56
我建议出一个像【黑月编译】的界面库,全部采用API画出界面,不使用任何MFC界面库,这样编译出来的程序轻巧 ...

火山视窗本来就没有绑定MFC, MFC只是其中实现的一个界面类库而已,可以很轻松地加入其它界面类库(譬如黑月的那种纯API方式).
作者: hmyroot    时间: 2021-3-13 21:05
67564226 发表于 2021-3-12 13:23
不带DLL估计肯定是不可能的, 在你选择使用支持库的时候,每选择一个模块或支持库,到时候你编译的时候, ...

你了解错了,纯API建立的ui是不需要带dll的,全部采用微软系统内核自带api
作者: hmyroot    时间: 2021-3-13 21:11
飞扬工作室 发表于 2021-3-13 20:28
火山视窗本来就没有绑定MFC, MFC只是其中实现的一个界面类库而已,可以很轻松地加入其它界面类库(譬如黑月 ...

请问一下!火山PC未来可以支持编写lib库和编写火山PC控件吗?
作者: 飞扬工作室    时间: 2021-3-13 22:02
编写Lib可能没有太大必要,因为VS所编译的lib是非常混乱的,经常下一个VS版本不认上一个版本的.
至于编写火山PC控件,现在就可以啊,现在的控件都全部是用火山自己编写的.




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4