Kly*_*yse 2 c++ linker-errors cimg
我试图让 CImg 与 Visual Sudio 2017 和 jpeg-9b 一起工作,但由于某种原因它没有。
代码:
#define cimg_use_jpeg
#include "../CImg/CImg.h"
using namespace cimg_library;
#pragma comment(lib, "libjpeg.a")
CImg<unsigned char> image("../images/img.jpg"), visu(500, 400, 1, 3, 0);
Run Code Online (Sandbox Code Playgroud)
第一步是库的构建,在这里我按照说明如何使用MinGW编译器。即使构建成功,生成的库
libjpeg.a在 Visual Studio 解决方案中也是不可链接的。错误信息:
状态错误 LNK2019 未解析的外部符号 __imp___iob 在函数 _output_message 中引用
另一个生成的库libjpeg.dll.a在加载.jpg文件时抛出错误 CImg Exception(图片)
经过几次重建后,问题仍然存在。我也尝试使用 VC 编译器,但找不到调用 build 时所需的win32.mak文件comand nmake -f makefile.vc setup-v10。这个文件的非官方下载在我的电脑上不能正常工作。无法在 Visual Studio 中打开生成的解决方案。
是否有一些解决方法 - 如果没有解决方案?
如果您想使用CImg读取/写入 JPEG 图像,您有多种选择:
您可以安装libjpeg我已经在此处详细介绍的内容。如果您遵循此选项,则必须使用:
#define cimg_use_jpeg
Run Code Online (Sandbox Code Playgroud)
和CIMG将编译和链接反对libjpeg和读写JPEG图像。您需要编译并安装libjpeg才能使用此选项。
您可以安装ImageMagick并且CImg可以将读取和写入委托给它。如果您选择此路线,请确保在安装ImageMagick期间勾选标题为“安装旧命令”或类似内容的框。此选项使您能够读写除 JPEG 之外的大约 200 种其他图像格式。它对于生成测试图像和尝试算法也非常有用,而无需编写任何 C++ 代码。主要的缺点是它是一个相当大的分布。
如果你想使用这个选项,你不能#define cimg_use_jpeg也不能#define cimg_use_magick。CImg将在运行时查找ImageMagick的convert.exe或magick.exe,并且ImageMagick不会为您的Visual Studio项目所知或参与其中。您可以致电:
imagemagick_path()
Run Code Online (Sandbox Code Playgroud)
告诉CIMG在运行时,你已经安装的ImageMagick的convert.exe或magick.exe。如果使用此选项,则save()在保存图像时应使用通用方法,而不是save_jpeg()或save_png()。
到目前为止,这是最简单的选择。
如果要使用此选项,则必须执行以下操作:
#define cimg_use_magick
Run Code Online (Sandbox Code Playgroud)
然后CImg将编译并与Magick++链接- ImageMagick的 C++ 接口。这将要求您安装Magick++的源代码,这可能是最难实现的选项。
根据您的目标,您可以想象安装更简单、重量更轻的NetPBM工具并将您的图像转换为PBM/PGM/PPM格式,因为CImg可以在没有任何外部库的情况下本地读取和写入那些。
可以想象,您可以system()在加载图像时使用 C++动态执行此操作。