2013-04-27 167 views
7

我有一些代码需要在没有root访问权限的计算机上运行。 该机器没有运行此代码所需的一些库。C - 编译包含的依赖关系

当我编译时,是否有任何方式来包含所有的依赖关系?我意识到结果文件可能相当大。

回答

7

你在找什么是静态编译。进行静态编译包括所有的库到可执行文件本身的,所以你不必担心,因为很多关于依赖性链的特定系统,配送等上

你可以做到这一点有:

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

-Wl将标志传递给链接器,-Bstatic指示它将链接静态化(如果可能),然后lib1,lib2是您要链接的库。

或者,尝试:

gcc -static-libgcc -static file.c 

编译仍需要匹配非特权系统的体系结构。你需要安装编译系统(lib.a)

如果编译正确的静态库,它应该显示“不是一个动态可执行文件”当您运行:

ldd a.out 
+0

感谢。我确认后会确认,但我认为这正是我之后的事情! – Hector 2013-04-27 00:20:32

+0

好吧,现在我明白了这个看起来很奇怪 /usr/bin/ld:找不到-lgcc_s 我所添加的所有内容都是你在 – Hector 2013-04-27 00:41:23

+0

之后用-openssl建议的内容:'-static-libgcc'和' -static-libstdC++'(如果使用C++) – 2013-04-27 00:48:58