我需要静态库来静态链接吗?

在'C'上,Linux,

我需要静态库静态链接,或者我有足够的共享吗? 如果没有,为什么不呢? (不要包含相同的数据?)

Solutions Collecting From Web of "我需要静态库来静态链接吗?"

是的,你需要静态库来建立一个静态链接的可执行文件。

静态库是编译对象的包。 当你静态链接到库时,它实际上就像获取该库的编译结果一样,在当前项目中解压缩它们,并将它们用作自己的对象。

动态库已经链接。 这意味着像重定位这样的一些信息已经被修复和抛出。

此外,动态库必须编译为位置无关的代码。 这不是对静态库的限制,并且会导致在一些常见平台(如x86)上的性能显着差异。

存在像ELF Statifier这样的工具,它试图将动态链接的库绑定到动态链接的可执行文件中,但是在任何情况下都很难生成正确的工作结果。

没有静态编译的东西,只有静态链接。 为此,您需要静态库。 静态链接和动态链接的不同之处在于,在链接时(在编译之后)解析名称,而在后者中解析名称,就像程序开始运行一样。

静态和动态库可能包含或不包含相同的信息,具体取决于许多因素。 是否静态或动态链接您的代码的决定是一个重要的决定,并将经常影响应用程序体系结构。

链接到静态链接程序的所有库必须是静态变量。 虽然动态库(libfoo.so)和静态库(libfoo.a)具有相同的功能,但是它们是不同的格式文件,因此您需要程序的匹配类型。

另一个选择是Ermine( http://magicErmine.com )这就像statifier,但能够处理内存随机化。