Lir*_*evi 9 c linux static-libraries static-linking
在'C',Linux,
我是否需要静态链接静态链接,或者我需要的共享库?如果没有,为什么不呢?(它们不包含相同的数据吗?)
eph*_*ent 11
是的,您需要静态库来构建静态链接的可执行文件.
静态库是编译对象的捆绑包.当您静态链接到库时,它实际上与获取该库的编译结果,在当前项目中解压缩它们并使用它们就好像它们是您自己的对象一样.
动态库已经链接.这意味着某些信息(如重定位)已经被修复并丢弃.
此外,必须将动态库编译为与位置无关的代码.这不是对静态库的限制,并且导致某些常见平台(如x86)的性能存在显着差异.
存在像ELF Statifier这样的工具,它们试图将动态链接的库捆绑成动态链接的可执行文件,但是在所有情况下都很难生成正确工作的结果.
小智 6
没有静态编译,只有静态链接.为此,您需要静态库.静态和动态链接之间的区别在于,对于前者,名称在链接时解析(在编译时之后),对于后者,它们在程序开始运行时被解析.
静态和动态库可能包含也可能不包含相同的信息,具体取决于许多因素.关于是静态还是动态链接代码的决定是一个重要的决定,并且通常会影响应用程序架构.