gpt4 book ai didi

c++ - 编译独立的静态可执行文件

转载 作者:行者123 更新时间:2023-11-30 16:58:32 60 4
gpt4 key购买 nike

我正在尝试编译一个不使用动态加载器的可执行文件(ELF 文件)。我构建了一个交叉编译器,可以从 Linux 编译 mips,以便在我制作的模拟器上使用。我在编译 hello.cpp 文件(hello world 程序)时声明了标志 -static-libgcc。显然这还不够。因为我的可执行文件中仍然有一个段包含动态加载程序的名称/路径。我使用什么标志来生成包含运行所需的所有内容的可执行文件?我需要重建交叉编译器吗?

最佳答案

使用以下标志进行链接

-static -static-libgcc -static-libstdc++

使用这三个标志来链接所有依赖项的静态版本(假设是 gcc)。请注意,在某些情况下,您不一定需要所有三个标志,但它们也不会“造成伤害”。因此,只需打开所有三个即可。

检查它是否确实有效

  1. 确保确实没有动态链接

    ldd yourexecutable

    应该返回“不是动态可执行文件”或类似的内容。

  2. 确保没有未解析的符号

    nm yourexecutable | grep " U "

    列表应该为空或者应该只包含一些特殊的内核空间符号,例如

    U __tls_get_addr
  3. 最后,检查您是否可以实际执行可执行文件

关于c++ - 编译独立的静态可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38729122/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com