使用 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
将 Clearcase 与 Visual Studio 2010 重新集成?