使用 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?