可能我在这里遗漏了一些东西,但这是我第一次在 Windows 上需要静态链接库,这样可执行文件就不会依赖于 dll。我使用 LIBPNG 来完成。
我是这样做的:
我添加了 libpng header :C/C++ -> 附加包含目录
向链接器添加库目录:链接器 -> 常规 -> 其他图书馆目录
添加链接器附加依赖项:链接器 -> 输入
编译 exe ok。调用它时我得到:
"The program can't start because libpng16.dll is missing from your computer."
这意味着 libpng 还没有编译成可执行文件。如果没有 reference the whole pnglib project code into my executable project,我该如何解决这个问题? ?
最佳答案
在 Windows 上,.lib 是一个库文件,通常它只包含加载 dll 的代码,查找导出的函数并为它们提供包装器。但是,您可以以不同的方式构建库,以便它包含实际的二进制代码,而不是这些包装器 stub 。 .lib 的操作和结构是相同的 - 它包含的代码取决于其构建方式。
因此,如果您将 libpng16 构建为“动态”lib/dll 对,那么在部署它时将需要 dll 部分。如果您仅将其构建为“静态”库,那么您会得到想要的。
重点是——您需要首先以您想要的格式构建库。不可能将 lib/dll 对转换为静态库,也不可能将 dll 合并到您的可执行文件中。 (好吧,在你构建它之后不可能 - 当然,如果你更改库的设置并重新编译以生成静态库形式,则完全有可能)
关于c++ - 在 VC++ 中静态链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23344445/