binary - 为什么使用 Meson / Ninja 生成的二进制文件比普通 valac 编译的要大得多?
问题描述
相同的源文件。
直接编译使用 valac。
⭕ valac --pkg gtk+-3.0 -X -lm --pkg libcanberra src/Application.vala
⭕ ls Application
-rwxrwxr-x 1 eexpss 48K 05-13 19:59 Application
这是我的 meson.build 的一部分。
project('com.github.eexpress.cairo-timer', 'vala', 'c')
# i18n = import('i18n')
executable(
meson.project_name(),
'src/Application.vala',
dependencies: [
dependency('gtk+-3.0'),
# dependency('cairo'),
dependency('libcanberra')
],
# link_args : '-X',
# link_args : '-lm',
link_args : ['-X', '-lm',],
install: true
)
并使用 ninja 编译它。
⭕ cd build; ninja
⭕ ls com.github.eexpress.cairo-timer
-rwxrwxr-x 1 eexpss 98K 05-13 17:02 com.github.eexpress.cairo-timer
所以二进制文件比上面一个大。为什么?
解决方案
因为您没有启用调试valac
,但介子默认启用它。添加-g
到valac
和输出大小应该接近相等。
要查看如何构建ninja
和运行工具来构建,请通过给这两个命令valac
启用详细选项。-v
正如我所假设的,微小的大小差异来自其中的文件名。例如,比较输出readelf --debug-dump=line hello
以查看差异。
推荐阅读
- sqlite - 如何使用颤振在 sqflite 中存储多维数组?
- python - 如何通过数据类型转换(十进制)将 pandas 数据框转换为自定义嵌套字典列表
- mitmproxy - 如何使用 mitmdump 将 http2 翻译成本地 http?
- c - for 循环中的 fprintf 无法正常工作
- security - AWS Cognito 用户池和账户 ID
- ios - 如何在 Objective-C 中访问 Self 中的元素?
- javascript - 我正在寻找一个支持视频文件中的多个音轨/流的 web/html5/javascript 视频播放器
- python - 具有多个 iPyWidgets 下拉菜单的交互式 Covid 绘图
- c# - 在两个用户控件/视图之间传递数据
- python - 保存 Excel 操作未正确完成