1

虽然寻找到编程语言Red,我遇到了以下项在它的路线图:什么是共享静态库?

共享静态库(.a)中

这似乎是一个矛盾的说法给我;我的印象是,共享库在运行时被加载(在编译时连接了一个较小的静态库,它的导出符号被链接),并且静态库在编译时被链接?

我的问题是

什么是shared static library

其他信息

,这是在为File Format Emitters下的情况下,分类别Mach-othis link是第一个地方,我注意到了,但仔细检查后,它提到的所有的地方。

+0

没有这样的事情。可能是文档中的错误。 –

+0

@ n.m。你确定?经过仔细检查,实际上在整个路线图的多个地方都提到了它。 – OMGtechy

+0

“共享静态库”是一个在互联网有记录的历史中大约使用过9次的术语,显然是用来描述两三种不同的东西。我认为确切知道红色作者的意思的唯一方法是直接询问他们。 –

回答

1

(红色的主要作者在这里)我会说一个糟糕的词语选择,可能是由另一个快速复制/粘贴的HTML片段引起的,并且重新阅读很差。 :-)

感谢您的注意。

+0

谢谢:)以为它看起来很奇怪! – OMGtechy

-2

通常情况下,静态库由原理共享,但对于静态库而言,共享词有另一个定义。

在C/C++中,共享静态库是一个标准的静态链接库,由一个应用程序和一个应用程序的偏移空间位置共享,并且所有动态库都在win上(对于linux也是一样,但在Linux上默认情况下它是一个选项) 。

MyApp.exe和MyDll.dll通过示例链接到具有共享基类和静态计数器的静态Shared.Core.lib的相同版本 - 当MyApp.exe在内存中加载MyDll.dll时。如何处理重复的Shared.Core.lib?

通常情况下,您不希望Shared.Core.lib的重复副本在内存中具有重复的共享基类定义。为了解决这个问题,当你加载其他动态库时,你必须将静态库加载到特定的地址而不覆盖它。应用程序加载器工作。

以lib您节省的内存数量,你可以分享你所有的应用程序/ DLL

的问题来与versionning之间所有的公用事业和静态数据或基类(在公共插件版本的情况下共享静态)的lib。所有版本都必须使用相同的静态库,并且lib必须在链接器知道的地址空间中加载。或者为特定的lib版本使用特定的加载地址,但在这里会变得复杂,我从来没有测试过共享静态库的多个副本。

使用共享静态库是一个编译器链接器选项,用于在内存应用程序的固定地址设置库。 这似乎是win32(带有/固定标志的vstudio)的标准选项,它是linux gcc(我不记得该标志)的选项。