我需要一个图像库,我一直在研究FreeImage,http://freeimage.sourceforge.net/。 我想将它与我的应用程序静态链接。
我已经尝试下载二进制文件并将其链接,但是当我尝试调用它们的函数时,我得到2019个链接器错误,即使我是肯定的,我将它链接正确。
然后我尝试下载他们的源代码,将他们的“FreeImageLib.2008”转换为VS2010并构建它。它自己构建得很好,但是在链接它时我仍然遇到同样的问题,我使用它的应用程序仍抱怨链接器错误。
我还设置了所有项目配置以匹配我的其他项目,因此与/ MDd或/ MTd等没有冲突。
我在他们的源代码中进行了一些挖掘,并且有像“FREEIMAGE_LIB”这样的宏,这表明它应该在构建静态库时定义,并且它已经定义,但它仍然不起作用。
我已经google了,找不到任何可靠的答案。 Getting FreeImage to work with Visual Studio 2010的答案没有区别;我已经在包含头文件之前定义了宏,或者作为预处理器参数定义了宏,但它确实有效。
这个库是不是要用作静态库,或者可能是什么问题? 有没有人能够在VS2010 +上静态链接FreeImage?
由于
答案 0 :(得分:11)
是的,我已经能够在几个Visual Studio版本上静态链接FreeImage。在这里,我描述了我通常如何做到这一点。
使用FreeImage,默认情况下,我们有8个选项可将其链接到您的应用:
FreeImage - 动态链接(你需要dll)。
FreeImageLib - 静态链接。
每个都可以使用“Debug”或“Release”配置以及Win32或Win64平台构建。
因此,假设我们的应用需要(静态&& Win32&& Debug)和(静态&& Win32&& Release)变体。同样在我们的应用程序中,我们使用Dynamic Runtime Library(默认情况下,FreeImage由于某种原因设置为静态) 我们通常如何得到它:
下载并打开新版本(或至少清理旧版本)
打开FreeImage.2008.sln
使用Shift +单击选择所有10个项目。然后在“Project(s)Properties / C ++ / Code generation”中,我们选择/ MDd用于“Debug”配置,/ MD用于“Release”。
然后我们转到“菜单/构建/批量构建”,选择:
FreeImageLib | Debug | Win32
FreeImageLib | Release | Win32
并按“Build”。
等待选择的配置构建。我们需要的所有内容都将复制到FreeImage\Dist
文件夹
在FreeImage\Dist
文件夹检查文件中:
delete.me
FreeImage.h
FreeImage.lib
FreeImaged.lib
检查创建日期和时间。它必须是新鲜出炉和热的。如果没有,请从FreeImage\Source\FreeImageLib\Debug
和FreeImage\Source\FreeImageLib\Release
。
FreeImage\Dist
并将FreeImaged.lib
链接到Debug配置,将FreeImage.lib
链接到Releases。包含在源文件中:
#define FREEIMAGE_LIB
#include "FreeImage.h"
尝试打电话
FreeImage_Initialise();
FreeImage_DeInitialise();
应该有效
快乐的编码!