Bre*_*own 10 c++ glibc g++ static-linking
我如何编译我的应用程序链接静态glibc库,但只有我的应用程序所需的代码?(不是所有的lib)
现在我的编译命令:
g++ -o newserver test.cpp ... -lboost_system -lboost_thread -std=c++0x
Run Code Online (Sandbox Code Playgroud)
谢谢!
这是什么-static(如另一个答案所述):不需要的模块不会链接到您的程序.但是,你就这东西量预期需要(在我们无法说服连接相反的感觉),可能过于乐观.
如果你试图这样做是为了便携(在其他机器上运行可执行文件与旧glibc或类似的东西),有一个简单的测试问题,看看你是否会得到你想要的:
你有没有想到这个问题libnss,你确定它不会咬你吗?
如果你的答案是肯定的,那么继续下去也许是有意义的.如果答案是否定的,或者问题似乎过于模糊而且没有答案,那么只要用静态链接的glibc退出你的过期:它有更多的机会受伤而不是帮助.
添加-static到编译行。它只会添加您的应用程序需要的内容[当然,您应用程序调用的函数以及这些函数调用的任何函数,包括一堆启动代码和其他一些零碎的函数],因此它将约为 800K(对于x86 机器上的一个简单的“hello world”程序)。其他架构有所不同。由于 boost 可能至少也会调用一点标准库,因此您的应用程序中可能会添加超过 800K 的库。但它只应用最终二进制文件中任何代码使用的函数,而不是整个库[作为共享库大约 2MB]。
如果您只想链接 glibc,则需要将编译的链接行修改为:
-Wl,-Bstatic -libc -Wl,-Bdynamic。这将防止任何其他库被静态链接[您有时需要有多个这些语句,因为有时另一个库拉入的东西需要从 glibc 拉入“更多” - 别担心,它不会'不要引入超出链接器认为必要的任何内容]。
| 归档时间: |
|
| 查看次数: |
17775 次 |
| 最近记录: |