1

我正在做一个几乎完成的图书馆项目。所以我现在给它一个测试运行。我运行我的测试项目没有问题。但是我不完全确定我是否做得对。主要是因为我不太了解到底发生了什么(至少我不完全确定)。

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

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

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

我对我目前的情况感到很困惑。有人可以澄清一下吗?

编辑:我正在使用 GCC。Codelite 作为我的 IDE。

4

1 回答 1

1

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

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

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

于 2012-07-19T19:54:22.200 回答