问题描述
我已成功链接到使用 FreeImage.2017.sln 中的 FreeImageLib 项目构建的静态 FreeImage 库。这是一个使用静态 FreeImage 库的示例:
#define FREEIMAGE_LIB
#include <iostream>
#include <FreeImage.h>
int main()
{
FreeImage_Initialise();
std::cout << "Version: " << FreeImage_GetVersion() << std::endl;
FreeImage_DeInitialise();
return 0;
}
链接静态库时需要上述#define
和Initialise/DeInitialise
方法。我还想静态链接到 FreeImagePlus 库。我已将 FreeImagePlus 项目配置类型更改为静态库并构建它。
FreeImagePlus 标头也使用 FREEIMAGE_LIB 宏,所以我使用了它。我还没有找到 FreeImagePlus 库的任何 Initialise/DeInitialse 方法。这是一个示例代码(应用程序链接到 FreeImagePlusd.lib):
#define FREEIMAGE_LIB
#include <FreeImagePlus.h>
int main()
{
fipImage img;
return 0;
}
我在构建该应用程序时遇到很多 LNK2019 和 LNK2001 错误,例如:
Error LNK2019 unresolved external symbol __imp_FreeImage_Allocate referenced in function "public: int __cdecl fipImage::combineChannels(class fipImage &,class fipImage &,class fipImage &)" (?combineChannels@fipImage@@QEAAHAEAV1@00@Z) C:\Workspace\MyProjects\TestCpp\out\build\x64-Debug\TestCpp C:\Workspace\MyProjects\TestCpp\out\build\x64-Debug\FreeImagePlusd.lib(fipImage.obj) 1
如何使用 FreeImagePlus 作为静态库?
编辑
解决方法
我在 wsl ubunto 20.04 上对此进行了测试,编译了 FreeImagePlus 并使用以下内容编译了您的代码:
clang++ testfree.cpp -I/mnt/d/Codes/VC/FreeImage/Dist /mnt/d/Codes/VC/FreeImage/Dist/libfreeim
ageplus.a
它只是链接没有任何问题(只是有一些警告):
/usr/bin/ld: /mnt/d/Codes/VC/FreeImage/Dist/libfreeimageplus.a(strenc.o): in function `StrIOEncInit':
strenc.c:(.text+0xffa): warning: the use of `tmpnam' is dangerous,better use `mkstemp'
虽然我认为您的 C++ 代码也需要使用 FreeImage_Initialise();
和 FreeImage_DeInitialise();
。