在VC ++中静态链接lib

时间:2014-04-28 14:59:14

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

可能我在这里遗漏了一些东西,但这是我第一次在Windows上,我需要静态链接一个lib,以便可执行文件不依赖于dll。我是用LIBPNG做的。

我这样做:

  1. 我添加了libpng标题:C / C ++ - >其他包含目录

  2. 向链接器添加了库目录:链接器 - >一般 - > 其他图书馆馆藏

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

  4. 编译exe ok。调用它时我得到了:

      

    "程序无法启动,因为您的libpng16.dll缺失   。电脑"

    这意味着libpng还没有编译成可执行文件。如何在没有reference the whole pnglib project code into my executable project的情况下修复它?

1 个答案:

答案 0 :(得分:1)

在Windows上,.lib是一个库文件,通常这只包含加载dll的代码,查找导出的函数并为它们提供包装器。但是,您可以不同地构建lib,以便它包含实际的二进制代码,而不是这些包装存根。 .lib的操作和结构是相同的 - 它包含的代码取决于它的构建方式。

因此,如果您已将libpng16构建为“动态”lib / dll对,那么在部署它时将需要dll部分。如果你只把它建成一个“静态”的lib,那么你就会得到你想要的东西。

关键是 - 你需要首先以你想要的格式构建lib。不可能将lib / dll对转换为静态库,也不可能将dll合并到可执行文件中。 (好吧,在你构建它之后不可能 - 完全可能,如果你改变了lib的设置并重新编译以生成静态的lib形式,当然)