c++ - 在 VC++ 中静态链接库

标签 c++ visual-c++ visual-studio-2012 linker

可能我在这里遗漏了一些东西,但这是我第一次在 Windows 上需要静态链接库,这样可执行文件就不会依赖于 dll。我使用 LIBPNG 来完成。

我是这样做的:

  1. 我添加了 libpng header :C/C++ -> 附加包含目录

  2. 向链接器添加库目录:链接器 -> 常规 -> 其他图书馆目录

  3. 添加链接器附加依赖项:链接器 -> 输入

编译 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/

相关文章:

c++ - 我将如何在 visual studio 2012 中启动 OpenGL 项目?

visual-studio - Visual Studio 11 电动工具 checkin 策略

c++ - c++-const成员func,只能使用ref限定符在左值实例上调用

c++ - C++模板类的内部类访问

c++ - 获取文件数据预处理器宏

c++ - 如何调试静态依赖加载问题?

visual-studio - Visual Studio 11 "Target Framework"一直恢复到 4

c++ - 在 C++11 中生成一个随机字符串?

c++ - 将(隐式)boost shared_ptr<T> 转换为 shared_ptr<const T>

c++ - 'dxerr9.h' : No such file or directory