gpt4 book ai didi

c++ - 静态库与动态库

转载 作者:太空狗 更新时间:2023-10-29 23:33:58 25 4
gpt4 key购买 nike

我已阅读有关静态库和动态库的内容。

我的问题不太具体。

dlopen dlclose :

Benifit of dlopen is  we can start the EXE with out
loading the necessary libraries at the begining. Only when we
need we will load the libratries and unload it from the memory.

这是动态链接库的行为。

我的问题是我是否链接库 libUtlities

ld -o EXE main.o -lUtilities 

当我运行EXE时,libUtlities会先加载到内存我首先使用那里的功能

which i observed in dbx (Solaris debugger)
But will not contribute to the size of the EXE.

1.那么是静态链接还是动态链接。 ?

最佳答案

不幸的是,“静态”和“动态”这两个词方式被过度使用了,尤其是在 C 和 C++ 中。所以,我更喜欢以下术语:

  • 链接时链接,又名“静态链接”:所有符号都在链接时从静态库中解析。结果是一个整体的、静态链接的可执行文件,没有加载时依赖性。

  • 加载时链接:这是现代平台上的标准做法,未解析的符号在共享库 (Unix) 或不幸命名的动态链接库 (DLLS) 在 Windows 上,并且仅在链接时记录引用,符号和代码加载的实际解析发生在加载时。

    这会产生一个“动态链接”的可执行文件,它必须用加载器(例如 Linux 上的 ld.so)加载。加载是操作系统的一部分,通常对用户是透明的,尽管它可以接受检查(例如 Linux 上的 ldd)。所有共享库必须在加载时可用,否则程序将无法启动。

  • 运行时链接,又名“动态链接”:没有未解析的符号;相反,运行时动态决定使用 dlopen() 在共享/动态库中查找符号或 LoadLibrary() .找不到符号是可处理的运行时条件,不是错误。此技术通常用于插件架构,并在 Windows 上用于代码注入(inject)。

但是请注意,Linux 的共享对象和 Windows 的 DLL 之间存在根本的技术差异,它们不仅仅是名称不同的同一事物。然而,两者都可以用于加载时和运行时链接。

关于c++ - 静态库与动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com