CImg X11使用CLion和CMake链接错误

时间:2016-08-11 18:45:22

标签: c++ clion cimg

我在CLion(Ubuntu)中有一个使用CImg库的C ++项目。目前,我无法正确构建项目。我在我的main.cpp文件中包含了CImg.h文件。我得到了一个类似于here的输出。我通过在终端中运行以下命令确保安装了X11工具:

sudo apt-get install libx11-dev

在上面链接的问题中,有一个答案说明要添加以下编译器选项:

-L/usr/X11R6/lib -lm -lpthread -lX11

然而,我遇到了2个问题。首先,我在CLion中使用CMake,而不是命令窗口,因此我不确定如何使用此命令(假设它有效)。其次,我的计算机上似乎没有上面指定的路径 - / usr中没有X11R6文件夹。因此,如何正确链接所需的X11库,以便我可以开始使用CImg?

(另外,我不知道这是否相关,但我没有安装Magick ++。)

2 个答案:

答案 0 :(得分:2)

需要建立 CImg 程序的方式遗憾的是文档中并不清楚。以下是我的看法:

第1步 - 您是否需要在屏幕上显示图像?

不,不要笑,你可能在无头网络服务器上操纵图像。

  • 如果您需要显示图片,则必须先执行#define cimg_display 0 才能包含"CImg.h"
  • 如果您确实需要显示图片,并且您在Windows上,则需要与gdi32
  • 相关联
  • 如果您确实需要显示图像并且您在macOS,OSX或Unix / Linux上,则需要为X11设置标题包含路径并与之链接

第2步 - 您是否需要读取/写入PNG格式图像?

  • 如果您需要此功能,或者您乐意让 CImg 使用已安装的 ImageMagick 来读/写PNG图像,什么都不做。

  • 如果您想使用 CImg 的内置功能来读取/写入PNG图像,则需要{/ 1}} 才能您包含#define cimg_use_png 1,您需要为 libpng 设置标题包含路径,并与"CImg.h" libpng相关联。

第3步 - 您是否需要读取/写入JPEG格式图像?

  • 如果您需要此功能,或者您乐意让 CImg 使用已安装的 ImageMagick 来读/写JPEG图像,什么都不做。

  • 如果您想使用 CImg 的内置功能来读取/写入JPEG图像,则需要{/ 1}} 才能您包含libz,您需要为 libjpeg 设置标题包含路径,并与#define cimg_use_jpeg 1相关联。

第4步 - 其他内容

还有一件事是你可能需要链接数学和POSIX线程库(使用"CImg.h"作为链接器开关),但我不知道如何检查所有平台,所以我会把它留给你 - 添加它可能没什么坏处。

所以,记住所有这些,并使用这个小测试程序:

libjpeg

-lm -lpthread内的 CMake #include "CImg.h" using namespace cimg_library; int main() { CImg<unsigned char> img(640,400,1,3); // Define a 640x400 color image with 8 bits per color component. img.fill(0); // Set pixel values to 0 (color : black) unsigned char purple[] = { 255,0,255 }; // Define a purple color img.draw_text(100,100,"Hello World",purple); // Draw a purple "Hello world" at coordinates (100,100). img.display("Window Title"); // Display the image in a display window. img.save_png("test.png"); // Save as PNG to prove we linked correctly img.save_jpeg("test.jpg"); // Save as JPG to prove we linked correctly return 0; } 将是这样的:

CmakeLists.txt

毕竟,这是我相当令人失望的形象!

enter image description here

答案 1 :(得分:0)

另一个答案对我不起作用。但是,添加

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(My_Project Threads::Threads)

target_link_libraries(My_Project X11)

到我的CmakeLists.txt工作从CLion运行下面链接的代码。我没有使用过CMake,所以我无法解释它(并且不能保证它是最佳的,但确实有效)。我通过查看指令中设置了哪些标志(http://cimg.eu/reference/group__cimg__overview.html)来计算出来,找出哪些是不必要的,然后找出如何将必要的两个(-lpthread和-lX11)添加到CMakeLists文件中。

这不是一个完整的安装解决方案;它补充了其他答案没有说的内容。在做上述操作之前,请不要忘记

sudo apt-get install libx11-dev

sudo apt-get install python3-tk