【问题标题】:ld linker's output executable is bigger than the golink output executable, why?ld 链接器的输出可执行文件比 golink 输出可执行文件大,为什么?
【发布时间】:2014-02-06 06:43:58
【问题描述】:

我已经用nasm 组装了一个简单的代码,并用ldgolink 链接了输出obj 文件 问题是 golink 输出可执行文件大小为2kb 但 ld 输出可执行文件大小为85kb

我正在使用 mingw32,两者都在使用库 kernel32.dll

链接命令是:

golink /entry _start /console test.obj kernel32.dll

&

gcc test.obj-L kernel32.dll

那么为什么尺寸会有这么大的差异呢?

我做错了吗?请您赐教。

【问题讨论】:

  • 您可能正在链接 C 库,请尝试 gcc -nostdlib
  • 使用 -nostdlib 选项文件大小减小到 5.02kb...但是使用 -nostdlib 选项我可以使用像 _printf 这样的功能吗?
  • 像 _printf 这样的函数是 C 标准库的一部分,如果不链接 C 标准库,就无法使用它们。

标签: windows assembly linker nasm ld


【解决方案1】:

要使用 GCC 达到 2KB 的可执行文件大小,请运行以下命令:

gcc test.obj -nostartfiles -s

与 GoLink 链接器相比,默认情况下,GCC 在可执行文件中包含更多数据。一个简单的gcc 命令包含一个符号表、重定位信息和一些其他引用。我们使用-s 标志来删除符号表和重定位信息,并使用-nostartfiles 标志来停止使用标准的系统启动文件(它引用了其他东西)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多