1

我在将我的项目与 FreeImage 库与 VSE 2013 链接时遇到了很多麻烦

我已经按照 VS2010 的这个答案无济于事:Linking FreeImage as a static library in VS2010?

调用 FreeImage 函数时出现 LNK2019 错误。

我已经链接了图书馆,就像我链接任何图书馆一样。以下是我所做的以下步骤:

  1. 下载免费图像源。

  2. 打开 2008 解决方案(转换为 2013)并将所有项目的代码生成更改为 /MDd

  3. 尝试构建项目,但由于某种原因未定义 min/max 函数所以我将 algorithm.h 包含到这些文件中并停止了这些错误。

  4. 尝试构建项目,我收到一个错误:“无法打开”afxres.h”。所以我按照另一个主题中的建议将 afxres.h 与 windows.h 交换。

  5. 构建项目 -> 成功

  6. 将 Fresh FreeImaged.lib 复制到我的项目中

    • 将目录添加到“附加库目录”
    • 将 FreeImaged.lib 添加到链接器下的附加依赖项
  7. 将 FreeImaged.dll 复制到我正在构建 .exe 的调试文件夹中

  8. 将 FreeImage.h 添加到项目中

  9. 在包含标题之前添加了#define FREEIMAGE_LIB

  10. 试图在任何地方构建我的项目-> LNK2019s。

如果有人能够在 VS2013 上构建 FreeImage 并且可以分享他们是如何做到的,我将不胜感激,或者如果有人有任何建议。

4

3 回答 3

3

您遇到麻烦的原因是在 Visual Studio 2013中引入了与 C++11 一致性相关的一些重大更改(如 Microsoft 所述)。

一个包括为了使用std::min()/std::max(),您现在必须包含标题. 这也涉及 FreeImage。不幸的是,直到版本 3.6.1(今天的最新版本),这还没有得到修复。

这篇博客文章解释了编译它需要做的事情。最相关的部分是:

具体来说,您需要添加

include <algorithm>

到以下文件:

Source/OpenEXR/IlmImf/ImfOutputFile.cpp
Source/OpenEXR/IlmImf/ImfScanLineInputFile.cpp
Source/OpenEXR/IlmImf/ImfTiledMisc.cpp
Source/OpenEXR/IlmImf/ImfTiledOutputFile.cpp
Source/OpenEXR/Imath/ImathMatrixAlgo.cpp
于 2014-09-17T18:31:33.467 回答
0

版本:FreeImage3170Win32Win64.zip

os.env.: win7 64bit visualstudio ULTIMATE 2013

手术:

     1_ just unpacking the zip somewhere
         e.g. (D:/library/FreeImage3170Win32Win64/FreeImage)

     2_ in C/C++->General->Additional Including Directerories
         add (D:/library/FreeImage3170Win32Win64/FreeImage/Dist/x32)

     3_ in Linker->General->Additional Library Directerories
         add (D:/library/FreeImage3170Win32Win64/FreeImage/Dist/x32)

     4_  in Linker->Input->Additional Dependency
         add (FreeImage.lib)
  • PS0:我只是在 Visual Studio 中的 Linker->input 中添加了一个新条目,包括目录和库目录以及 FreeImage.lib,而不重建 FreeImage 库:)
  • PS1:当我添加 FreeImage/Dist/x64 选项时发生错误 LNK2019;((对此一无所知)

也许这有帮助:)

于 2016-05-01T06:35:25.330 回答
0

我可以通过进入配置管理器取消选中 FreeImage 并检查构建下的 FreeImageLib 来使其工作。同样禁用整个程序优化似乎使二进制大小更正常,并且在链接时摆脱了警告。

我知道这个问题已经有一年多了。只是为像我一样在谷歌搜索这个问题的任何人提供答案。

于 2016-01-14T13:34:58.660 回答