9

我需要一个图像库,并且我一直在研究 FreeImage, http: //freeimage.sourceforge.net/。我想将它与我的应用程序静态链接。

我已经尝试下载二进制文件并将其链接,但是当我尝试调用它们的函数时出现 2019 链接器错误,即使我很肯定我链接它是正确的。

然后我尝试下载他们的源代码,将他们的“FreeImageLib.2008”转换为 VS2010 并构建它。它自己构建得很好,但是在链接它时我仍然遇到同样的问题,我使用它的应用程序仍然抱怨链接器错误。

我还设置了所有项目配置以匹配我的其他项目,因此与/MDd或/MTd等没有冲突。

我在他们的源代码中进行了一些挖掘,并且有像“FREEIMAGE_LIB”这样的宏,这表明应该在构建静态库时定义它,并且它已定义,但它仍然不起作用。

我用谷歌搜索了这个问题,找不到任何可靠的答案。让 FreeImage 与 Visual Studio 2010 一起工作的答案没有区别;我已经在包含标头之前或作为预处理器参数定义了宏,但它不起作用。

这个库是否不打算用作静态库,或者可能是什么问题?有没有人能够在 VS2010+ 上静态链接 FreeImage?

谢谢

4

1 回答 1

12

是的,我已经能够在几个 Visual Studio 版本上静态链接 FreeImage。在这里,我描述了我通常如何做到这一点。

使用 FreeImage,默认情况下,我们有 8 个选项将其链接到您的应用程序:

FreeImage - 动态链接(您将需要 dll)。

FreeImageLib - 静态链接。

这些中的每一个都可以使用“调试”或“发布”配置构建,并且适用于 Win32 或 Win64 平台。

因此,假设我们的应用需要 ( Static && Win32 && Debug ) 和 ( Static && Win32 && Release ) 变体。同样在我们的应用程序中,我们使用动态运行时库(默认情况下,出于某种原因,FreeImage 设置为静态)我们通常是如何得到它的:

  • 下载并解压新版本(或至少清理旧的 distib)

  • FreeImage.2008.sln按住 Shift 并单击打开选择 10 个项目中的所有项目。然后在“Project(s) Properties / C++ / Code generation”中,我们为“Debug”配置选择 /MDd,为“Release”选择 /MD。

  • 然后我们进入“Menu / Build / Batch build”,选择:

    FreeImageLib | Debug | Win32

    FreeImageLib | Release | Win32

并按“构建”。

  • 等待构建的选定配置。我们需要的所有内容都将复制到FreeImage\Dist文件夹中

  • FreeImage\Dist文件夹检查文件中: delete.me FreeImage.h FreeImage.lib FreeImaged.lib 检查创建日期和时间。它必须是新鲜出炉的和热的。如果没有,请从FreeImage\Source\FreeImageLib\Debug和复制它们FreeImage\Source\FreeImageLib\Release

  • 在主要应用程序中添加到包含和库FreeImage\Dist并链接FreeImaged.lib到调试配置和FreeImage.lib发布。
  • 包含在源文件中:

    #define FREEIMAGE_LIB

    #include "FreeImage.h"

  • 试着打电话 FreeImage_Initialise(); FreeImage_DeInitialise();

  • 它应该工作

快乐编码!

于 2013-04-24T13:55:59.373 回答