如何静态链接复杂的程序

Lir*_*evi 20 linux linker static

在Linux中,下载了一个程序源,并希望它是静态链接的.我有一个巨大的Makefile

./configure
make
Run Code Online (Sandbox Code Playgroud)

编译.prehpes它有点太笼统,但我怎么能使二进制静态链接?

编辑:这样做的原因是为了确保二进制文件没有依赖关系(或者至少尽可能少),使得可以在任何基于Linux的计算机上运行,​​即使没有Internet连接的计算机,也可以运行非更新的Linux.

edu*_*ffy 32

大多数autoconf生成的configure脚本都允许您进行静态构建:

 ./configure --enable-static
 make
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您可以在via中传递链接器标志LDFLAGS,如下所示:

 ./configure LDFLAGS=-static
Run Code Online (Sandbox Code Playgroud)

  • 这个答案并不完全正确。`--enable-static` 标志仅用于库,它的意思是“构建这个库的静态版本(可能除了动态版本)”。动态版本(使用 `--enable-shared` 启用)对于 Linux 是 `.so` 或对于 Mac 是 `.dylib`,静态版本通常是 `.a`。 (3认同)
  • 仅供参考,如果“LDFLAGS”方法不起作用,请在前面添加另一个破折号。`./configure LDFLAGS='--static'`。这可能适用于某些项目,例如“procps” (3认同)
  • 在CentOS上,您需要为静态链接安装的软件包是`glibc-static`用于c和`libstdc ++ - static`用于c ++静态链接.有关详细信息,请参阅[此帖子](https://www.systutorials.com/5217/how-to-statically-link-c-and-c-programs-on-linux-with-gcc/) (2认同)

Byr*_*ock 5

是的,您需要编辑make文件并在链接期间将-static参数添加到gcc.