为什么使用 Meson / Ninja 生成的二进制文件比使用普通 valac 编译的二进制文件大得多?
Why are the binaries generated by using Meson / Ninja much larger than those compiled by plain 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
启用调试,但 meson 默认启用它。将 -g
添加到 valac
,输出大小应该接近相等。
要查看 ninja
和 valac
运行 工具如何构建,请通过给两个命令 -v
启用详细选项。
正如我所假设的那样,较小的大小差异来自其中的文件名。例如,比较 readelf --debug-dump=line hello
的输出以查看差异。
相同的源文件。
直接编译使用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
启用调试,但 meson 默认启用它。将 -g
添加到 valac
,输出大小应该接近相等。
要查看 ninja
和 valac
运行 工具如何构建,请通过给两个命令 -v
启用详细选项。
正如我所假设的那样,较小的大小差异来自其中的文件名。例如,比较 readelf --debug-dump=line hello
的输出以查看差异。