10

我有一些代码想在我没有 root 访问权限的机器上运行。该机器没有运行此代码所需的一些库。

编译时有什么方法可以包含所有依赖项吗?我意识到生成的文件可能非常大。

4

1 回答 1

12

您正在寻找的是静态编译。执行静态编译将所有库包含到可执行文件本身中,因此您不必担心特定系统、发行版等上的依赖链。

你可以这样做:

gcc -Wl,-Bstatic -llib1 -llib2 file.c

-Wl后面的标志传递给链接器,-Bstatic告诉它尽可能链接静态,然后lib1,lib2是您打算链接的库。

或者,尝试:

gcc -static file.c

编译仍然需要匹配非特权系统的体系结构。并且您需要在编译系统上安装静态库(lib.a

如果编译正确,它应该在运行时显示“不是动态可执行文件”:

ldd a.out
于 2013-04-27T00:17:54.423 回答