【问题标题】:Static libpng link with visual studio 2010与 Visual Studio 2010 的静态 libpng 链接
【发布时间】:2011-02-26 17:40:38
【问题描述】:

我正在尝试将 PNG 支持添加到我的应用程序中,因此我想包含 libpng。我知道它需要 zlib,因此我也下载了它。我进入 png 文件夹/projects/vstudio 并打开了解决方案。我编译了它,它运行得很好。我将其中的一些标头添加到我的应用程序中,并复制了 lib 文件。我的程序是一个用 c++ 编写的 dll,后来在 C# 中使用。当我在 C# 中运行它时,它抱怨找不到我的 dll(如果我删除 png 部分它工作正常,这很难)。我以前遇到过这个问题,这通常意味着 dll 依赖项是错误的。
现在... libpng 编译了一些 .lib 文件和一些 .dll 文件。 dll文件更大。我唯一的猜测是它也需要 dll 文件,但我看到人们可以在没有 dll 的情况下链接到 libpng。
所以我的问题是:如何将 libpng(和该实例的 zlib)编译成静态库,如何将它们包含在我的项目中?我在互联网上搜索过,找不到任何有用的东西。

【问题讨论】:

    标签: c++ zlib static-linking libpng


    【解决方案1】:

    要使您的所有库成为静态库,您必须将所有内容“从头开始” 重新编译为静态库。

    这只是意味着您应该为序列中的每个库创建一组项目,并将输出类型设置为静态库

    之后你应该消除库本身之间的库依赖(这意味着你应该将一些项目的输出链接到另一个项目,例如如果你的“libpng”库使用“libzip”,这意味着你应该首先编译“libzip”并将该输出(静态库)链接到您的“libpng”项目。

    最后,您将拥有大量为您的平台编译的静态库,您可以在项目中使用这些库。


    另外提一下,尝试更仔细地使用谷歌搜索。我确信有人已经完成了这项工作,您可能需要为您的平台下载一个 .lib 文件包(我知道经常"dev" 库包只包含一个导入库和适当的 .dll 文件,但是有很多像你这样的爱好者:)

    【讨论】:

    • 真正重新编译这些东西并不难——创建一个项目,添加所有文件。并且不再有不同的运行时版本或类似的问题。
    • 好吧,尝试通过“创建项目并添加文件”来完全构建 gtkmm ;) 有时所有这些内部依赖项都可能会让人头疼。
    • 也许可以,但我们构建 zlib 和 SQLite 没有任何麻烦。
    • 是的,其实很简单。还有一个问题:如果我也想添加同样取决于 zlib 的 libjpg,我应该如何进行链接?让 libpng 和 libjpg 都静态链接其中的 zlib,然后将我的应用程序链接到两者?
    • @Sanctus2099:不,您分别编译每个并将它们链接到最终项目。或者您可以将所有三个库源放入一个项目并获得一个静态库。第一种方法会更灵活,但需要更多配置。
    猜你喜欢
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 2011-10-29
    • 2012-03-22
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多