使用 Visual Studio Express 2013 构建和链接 FreeImage

Posted

技术标签:

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

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

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

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

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

    下载 FreeImage 源代码。

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

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

    尝试构建项目时出现错误:“无法打开“afxres.h”。因此我按照另一个主题中的建议将 afxres.h 与 windows.h 交换。

    构建项目 -> 成功

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

    将目录添加到“其他库目录” 将 FreeImaged.lib 添加到链接器下的附加依赖项中

    将 FreeImaged.dll 复制到我正在构建 .exe 的调试文件夹中

    将 FreeImage.h 添加到项目中

    在包含标头之前添加了#define FREEIMAGE_LIB

    尝试构建我的项目 -> 到处都是 LNK2019。

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

【问题讨论】:

我在编译 Ogre3D 时遇到了同样的麻烦...... FreeImage 编译正常,但 Ogre 没有链接它,LNK2019 每次引用 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:***.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 ;((对此一无所知)

也许这有帮助:)

【讨论】:

以上是关于使用 Visual Studio Express 2013 构建和链接 FreeImage的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio Express 2013 或 Visual Studio Pro 2010

使用 Visual Studio 2010 express 编译 CUDA 示例

MFC 是不是仅适用于 Visual Studio,不适用于 Visual C++ Express?

是否需要将 Visual Studio Express 解决方案转换为 Visual Studio Professional 解决方案?

在 Visual Studio 2013 Express 中使用 OpenGL

如何使用 Visual Studio 2010 Express 连接到 SqlExpress for Entity Framework?