我该如何编译我的应用程序,将glibc库静态链接,但只链接我应用程序所需的代码?(不是所有的库)
现在我的编译命令:
g++ -o newserver test.cpp ... -lboost_system -lboost_thread -std=c++0x
谢谢!
我该如何编译我的应用程序,将glibc库静态链接,但只链接我应用程序所需的代码?(不是所有的库)
现在我的编译命令:
g++ -o newserver test.cpp ... -lboost_system -lboost_thread -std=c++0x
谢谢!
-static
的作用(正如另一个答案中所述):不需要的模块不会链接到你的程序中。但是你对于必要内容的期望值(从我们无法说服连接器的角度来看)可能过于乐观。libnss
的问题,并且你确定它不会影响你?-static
。它只会添加你的应用程序所需的内容[当然,包括应用程序调用的函数、那些函数调用的函数以及一些启动代码和其他一些部分],因此在x86机器上,一个简单的“hello world”程序大约为800K。其他架构有所不同。由于boost可能至少会调用标准库,所以您的应用程序可能会增加超过800K的大小。但它仅适用于最终二进制文件中使用的任何代码所使用的函数,而不是整个库[作为共享库约为2MB]。-Wl,-Bstatic -libc -Wl,-Bdynamic
。这将防止任何其他库被静态链接[有时需要有多个这样的语句,因为有时由另一个库引入的某些东西需要从glibc中引入“更多”——不要担心,它不会带来比链接器认为必要的东西更多的东西]。