使用 Visual Studio 2010 将 libexif 编译为静态库 - 然后从 Visual C++ 项目链接

Posted

技术标签:

【中文标题】使用 Visual Studio 2010 将 libexif 编译为静态库 - 然后从 Visual C++ 项目链接【英文标题】:Compiling libexif as static lib with Visual Studio 2010 - then linking from Visual C++ project 【发布时间】:2012-07-30 19:10:50 【问题描述】:

是否可以使用 Visual Studio 2010 编译 libexif?我一直在尝试这样做,并且遇到了一大堆问题。我找不到任何关于之前是否有人成功完成此操作的信息。我知道我可以使用 MinGW 编译库,但我需要使用 Visual Studio 编译它,然后需要从 Visual C++ 应用程序链接到它。这可能吗?

【问题讨论】:

我知道这是一个老问题,但我也有同样的问题。查找 DLL(例如 GIMP 的 libexif.dll)并使用 dumpbin 创建 .lib 文件可能更容易,尽管您仍然需要 .h 文件,而 libexif 中的 .h 文件需要生成 config.h 文件. 【参考方案1】:

回答您的问题:是的这是可能的......但这有点像黑客。 Libexif 使用 MSVC 选择不实现的功能。请参阅下面的工作示例 VS2010 项目(如果您不喜欢下载文件,请跳到我对需要更改的内容的说明以使其工作):

https://www.dropbox.com/s/l6wowl8pouux01a/libexif-0.6.21_CompiledInVS2010%2BExample.7z?dl=0

详细来说,需要“破解”的问题(如 LibExif readme-win32.txt 文档中所暗示的)是:

Libexif 在几个地方使用了 inline,这在 VS 中没有为 C 定义,只有 C++(参见 this)

Libexif 在 VS 中未定义的代码中广泛使用 snprintf(参见 here)

您需要自己创建 config.h,而不需要 ./configure 命令来帮助您。您可以通读该脚本,但其中大部分内容对于 Windows VS2010 没有意义。

您需要定义GETTEXT_PACKAGE,因为它可能已在配置文件中设置。我只是选择UTF-8,是否正确我不确定。

有一个随机的 unsigned static * 需要从 .c 文件移动到 .h 文件,因为 VS 中的 C 不允许您在函数内创建新变量以他们试图做的特定方式。

【讨论】:

【参考方案2】:

阅读“readme-win32.txt”文件。建议是:

以某种方式破解自己的构建系统。 这似乎是 Windows 的做事方式。

不要抱太大希望。 *nix 的做事方式是需要先运行的配置脚本。它自动生成源文件以将库与 *nix 的特定风格结合起来。配置脚本几乎是半兆字节。实际 .c 文件中的代码是实际 .c 文件的三倍 :) 如果没有 MinGW,您将无法合理地使其正常工作,因此您可以执行脚本。完成此操作后,您就可以使用 VS 解决方案更好地解决问题。只要不使用过多的 C99 特定语法即可。

【讨论】:

以上是关于使用 Visual Studio 2010 将 libexif 编译为静态库 - 然后从 Visual C++ 项目链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 2010 将 libexif 编译为静态库 - 然后从 Visual C++ 项目链接

Visual Studio Express 2013 或 Visual Studio Pro 2010

Visual Studio 2010 快捷键

将 Clearcase 与 Visual Studio 2010 重新集成?

WCF 未将所有内核与 Visual Studio 2010 负载测试一起使用

Visual Studio 2010 数据库项目无法识别 SQL 2008 地理数据类型