Glibc的静态链接(Static linking of Glibc)

2019-07-18 21:27发布

我怎么编译我的应用程序静态链接glibc库,但需要我的应用程序只有代码? (并非所有的LIB)

现在我的编译命令:

g++  -o newserver  test.cpp ... -lboost_system -lboost_thread -std=c++0x

谢谢!

Answer 1:

这就是-static确实(在另一个答案所述):不需要的模块将不会链接到你的程序。 但是,你对哪些是需要 (在我们无法说服连接相反感)的东西量的预期可能过于乐观。

如果你试图做它的可移植性(运行在其他机器上的可执行文件与旧的glibc或类似的东西),有一个简单的测试问题,看看你会得到你想要的东西:

你认为有问题的libnss ,和你确定它不会咬你?

如果你的答案是肯定的 ,也许是有意义的继续。 如果答案是否定的,或者这个问题似乎过于模糊,没有回答,只需要退出expirements与静态链接glibc的:它有更多的机会,而不是帮助伤害。



Answer 2:

添加-static的编译行。 它只会增加您的应用需求[当然,任何功能的功能,您的应用程序调用,这些函数调用的任何功能,包括一堆启动代码和其他一些零碎],所以这将是什么左右800K(为在x86机器上的一个简单的“Hello World”程序)。 其他架构有所不同。 由于升压大概也称标准库至少一点点,很可能是你将有超过800K添加到您的appliciation。 但它仅适用于最终的二进制,而不是整个库[约2MB作为共享库]使用任何的代码的功能。

如果你只是想链接的glibc,你将需要修改的连接线,以你的编译到: -Wl,-Bstatic -libc -Wl,-Bdynamic 。 这将防止静态链接任何其他库[有时候你需要有这些语句的不止一个,因为有时一些被其他库拉到需要从glibc的“多”被拉到中 - 不用担心,它赢得了”牛逼带来任何超过链接认为是必要的。



文章来源: Static linking of Glibc