我怎么编译我的应用程序静态链接glibc库,但需要我的应用程序只有代码? (并非所有的LIB)
现在我的编译命令:
g++ -o newserver test.cpp ... -lboost_system -lboost_thread -std=c++0x
谢谢!
我怎么编译我的应用程序静态链接glibc库,但需要我的应用程序只有代码? (并非所有的LIB)
现在我的编译命令:
g++ -o newserver test.cpp ... -lboost_system -lboost_thread -std=c++0x
谢谢!
这就是-static
确实(在另一个答案所述):不需要的模块将不会链接到你的程序。 但是,你对哪些是需要 (在我们无法说服连接相反感)的东西量的预期可能过于乐观。
如果你试图做它的可移植性(运行在其他机器上的可执行文件与旧的glibc或类似的东西),有一个简单的测试问题,看看你会得到你想要的东西:
你认为有问题的libnss
,和你确定它不会咬你?
如果你的答案是肯定的 ,也许是有意义的继续。 如果答案是否定的,或者这个问题似乎过于模糊,没有回答,只需要退出expirements与静态链接glibc的:它有更多的机会,而不是帮助伤害。
添加-static
的编译行。 它只会增加您的应用需求[当然,任何功能的功能,您的应用程序调用,这些函数调用的任何功能,包括一堆启动代码和其他一些零碎],所以这将是什么左右800K(为在x86机器上的一个简单的“Hello World”程序)。 其他架构有所不同。 由于升压大概也称标准库至少一点点,很可能是你将有超过800K添加到您的appliciation。 但它仅适用于最终的二进制,而不是整个库[约2MB作为共享库]使用任何的代码的功能。
如果你只是想链接的glibc,你将需要修改的连接线,以你的编译到: -Wl,-Bstatic -libc -Wl,-Bdynamic
。 这将防止静态链接任何其他库[有时候你需要有这些语句的不止一个,因为有时一些被其他库拉到需要从glibc的“多”被拉到中 - 不用担心,它赢得了”牛逼带来任何超过链接认为是必要的。