gpt4 book ai didi

C++:静态库和动态库(编译运行)

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:03 25 4
gpt4 key购买 nike

我正在从事一个几乎已经完成的图书馆项目。所以我现在要试运行。运行我的测试项目没有问题。但是,我不确定我是否做对了。主要是因为我真的不明白到底发生了什么(至少我不完全确定)。

我已经编译了 DLL 和静态库 (.a)。对于我的测试项目,我使用我的库中的 header 并链接到静态库。我能够编译。但是似乎我还需要可执行文件所在的 DLL 才能运行。

据我所知,我使用静态库进行编译,但我没有将它完全嵌入到我的可执行文件中,因此在运行时它正在寻找 DLL?

我的困惑来自于我读到静态库通常嵌入到可执行文件中这一事实。但这不是只有在编译器选项中指定时才会发生吗?

在我的情况下,我对这种关系感到很困惑。有人可以澄清一下吗?

编辑:我正在使用海湾合作委员会。Codelite 作为我的 IDE。

最佳答案

lib 在编译时是静态的(不能在运行时动态链接)。因此,您认为 lib 是“嵌入”在可执行文件中是正确的。更准确地说,lib 链接到编译器为构建 exe 文件而生成的其他目标文件。一个库不能链接到另一个库,只有 exe 或 dll 可以链接到一个库。

dll 在 exe 运行时由 exe 动态链接。 dll就像另一个exe,但它的入口函数是“dllmain”而不是“main”。 dll 可以像 exe 一样用 lib 构建。 dll 还可以在运行时链接到其他 dll,以与这些 dll 的功能交互。 dll 的接口(interface)由 def 文件定义。

至于为什么你的项目需要这个dll,你可能想检查你项目中LoadLibrary的调用。

关于C++:静态库和动态库(编译运行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11567798/

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