【问题标题】:How i can static build GDB from source?我如何从源代码静态构建 GDB?
【发布时间】:2012-03-11 00:05:01
【问题描述】:

我已经下载了 gdb-6.5.bz2.tar。解压此文件。 我写: LDFLAGS=-静态 ./配置

但结果我得到了一个 gdb,它需要一个 so 文件,例如:ncurses.so.5 libc.so.0 等

我如何静态构建?

【问题讨论】:

  • 你可能做不到。如果您愿意,您将必须获得所有必备库的静态版本,这可能比您花更多的时间重新编译。为什么要构建静态链接的 GDB?动态链接的版本会简单很多。
  • @JonathanLeffler:如果你想调试一个新启动的系统,静态链接的 gdb 非常有价值。如果新系统将使用与您正在构建的原始系统不兼容的 ABI,则更是如此——例如,不同的 libc 或不同的默认调用约定。
  • @R..:很好,但是您需要为 GDB 链接的每个库获取或构建一个静态库。在 RHEL 5 系统上,这意味着:libreadline.so.5、libncurses.so.5、libm.so.6、libexpat.so.0、libdl.so.2、libc.so.6、/lib64/ld- linux-x86-64.so.2 如果ldd /usr/bin/gdb 的输出是可信的。我不确定您是否真的想用静态库替换所有这些,但这是gdb 在这个(古董)平台上使用的共享库列表。
  • 这只是 glibc、readline、ncurses 和 expat - 4 个库。 libdl、libc、ld-linux 和 libm 都是 glibc 的一部分。

标签: c linux gcc gdb


【解决方案1】:

gcc 和 gdb 都不尊重应该传递给 configure--enable-static 标志,正确的做法是:

在gdb 8.0的情况下,您还必须添加--disable-interprocess-agent才能成功构建静态版本:

mkdir build-gdb && cd build-gdb && ../configure --prefix=... --enable-static --disable-interprocess-agent ...

在 gcc 7.1 的情况下,您还必须添加 --disable-libcc1 才能成功构建静态版本:

mkdir build-gcc && cd guild-gcc && ../configure --prefix=... --enable-static --disable-shared --disable-libcc1 ...

【讨论】:

    【解决方案2】:

    您可以为 configure 脚本使用以下选项来生成静态 GDB 可执行文件:

    ./configure --prefix=<> --enable-static=yes && make && make install
    

    【讨论】:

      【解决方案3】:

      This message似乎暗示正确的用法是

      $ make LDFLAGS=-static
      

      这似乎令人惊讶。不幸的是,它还说它无法构建,并且没有后续行动。仍然是 1999 年的信息,所以一切都可能发生了变化,也许今天正确的方法就是按照自己的方式去做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-17
        • 2021-10-07
        • 2012-01-21
        • 2012-06-13
        相关资源
        最近更新 更多