【问题标题】:Building & Linking FreeImage with Visual Studio Express 2013使用 Visual Studio Express 2013 构建和链接 FreeImage
【发布时间】:2014-01-13 07:31:45
【问题描述】:

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

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

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

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

  1. 下载 FreeImage 源代码。

  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. 尝试构建我的项目 -> 到处都是 LNK2019。

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

【问题讨论】:

  • 我在编译 Ogre3D 时遇到了同样的麻烦...... FreeImage 编译正常,但 Ogre 没有链接它,LNK2019 每次引用 FreeImage 函数。

标签: c++ visual-studio-2013 visual-studio-express freeimage


【解决方案1】:

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

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

这个blog post 解释了编译它需要做什么。最相关的部分是:

具体来说,你需要添加

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

【讨论】:

  • 嗨,我进行了这些更正以尝试构建 FreeImage Static 并且它有效。我还使用另一个答案将 FreeImage 构建为静态库,该库也适用于 VS2013:stackoverflow.com/questions/16186300/… 我遇到的问题是最终库文件的大小。调试版本 (FreeImaged.lib) 是 52.1MB,而发布版本 (FreeImage.lib) 的大小是惊人的 99.7MB。你觉得这对吗?
  • 确实很大。使用 VS2012 我得到 FreeImage.lib = ~20MB 和 FreeImage_d.lib ~ 49MB。但这些大小可能取决于不同的编译设置,既适用于 IDE/编译器,也适用于库本身(我不确定 Ogre3D 是否只使用 FreeImage 库的子集)。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    版本: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:我只是在包含目录和库中添加了一个新条目 目录和 FreeImage.lib 到链接器-> Visual Studio 中的输入,无需重建 FreeImage 库 :)
    • PS1:当我添加 FreeImage/Dist/x64 选项时发生错误 LNK2019 ;((对此一无所知)

    也许这有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 2015-01-26
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多