在 'C',Linux的,
我是否需要静态库静态链接,或共享那些我已经足够了? 如果不是,为什么不呢? (难道他们不包含相同的数据?)
在 'C',Linux的,
我是否需要静态库静态链接,或共享那些我已经足够了? 如果不是,为什么不呢? (难道他们不包含相同的数据?)
是的,你需要静态库建立一个静态链接的可执行文件。
静态库是编译对象束。 当您使用静态链接到库,它是有效的一样服用该库的编译结果,在当前项目拆包它们,使用它们,好像他们是自己的对象。
动态库已链接。 这意味着,像一些搬迁的信息已经被固定起来,扔出去。
此外,动态库必须被编译成与位置无关的代码。 这不是静态库的限制,并导致显著差异在性能上的一些常见的平台(如86)。
存在类似的工具ELF Statifier它试图捆绑动态链接库到一个动态链接的可执行文件,但它是非常难以产生在所有情况下正确工作的结果。
有静态编译,只有静态链接没有这样的事情。 而对于这一点,你需要静态库。 静态和动态链接之间的区别是前者,名在链接时解析(刚过编译时),wheras后者,他们都解决了,就像程序开始运行。
静态和动态库可以或可以不包含相同的信息,这取决于很多因素。 是否静态或动态链接代码的决定是一个重要的,而且往往会影响应用程序的架构。
您链接到一个静态链接程序库的所有必须是静态的变种。 虽然动态(libfoo.so)和静态(libfoo.a)库中都有相同的功能,它们是不同格式的文件,所以你需要为你的程序的匹配类型。
另一种选择是阿明( http://magicErmine.com )这就像statifier,但能够处理内存随机化。