C - 包含依赖项的编译

Hec*_*tor 9 c gcc static-linking

我有一些代码,我想在一台我没有root权限的机器上运行.该机器没有运行此代码所需的一些库.

在编译时有没有办法包含所有依赖项?我意识到结果文件可能非常大.

Ale*_*ett 9

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

你可以这样做:

gcc -Wl,-Bstatic -llib1 -llib2 file.c
Run Code Online (Sandbox Code Playgroud)

-Wl下面的链接标志传球,-Bstatic告诉如果可能的话它链接的静态,然后lib1,lib2是你打算链接库.

或者,尝试:

gcc -static-libgcc -static file.c
Run Code Online (Sandbox Code Playgroud)

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

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

ldd a.out
Run Code Online (Sandbox Code Playgroud)

  • 好的,现在我明白了,这看起来很奇怪 /usr/bin/ld: cannot find -lgcc_s 我添加的是你在 -openssl 之后的建议 (2认同)