You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Eclipse下CImg库链接错误排查求助(C++)

解决Eclipse中CImg链接X11库的未定义引用问题

我之前也碰到过一模一样的情况!问题出在Eclipse的编译命令参数顺序上,虽然你已经正确配置了要链接的库,但Eclipse默认把库参数放在了源文件前面,这会让链接器找不到需要的符号。

先看你给出的错误编译命令:

g++ -O3 -Wall -std=c++11 -lX11 -L/usr/X11R6/lib -lm -pthread -MMD -MP -MF"src/per_iniziare.d" -MT"src/per_iniziare.d" -o "src/per_iniziare.o" "../src/per_iniziare.cpp"

注意到-lX11这些库参数在../src/per_iniziare.cpp之前,而你终端手动编译时是把库参数放在源文件之后的:g++ -O3 -o try main.cpp -L/usr/X11R6/lib -lm -lX11 -pthread——这才是正确的顺序,因为链接器是按顺序处理输入的,必须先编译源文件,再链接它依赖的库,否则链接器还没看到源文件里的符号引用,就先处理库了,自然会报未定义引用。

具体解决步骤:

  • 右键你的Eclipse项目,选择Properties
  • 展开左侧菜单的C/C++ Build > Settings,然后切换到GCC C++ Linker选项卡
  • 先确认Libraries页面里已经添加了X11、m、pthread这几个库(你已经配置过,但再检查一遍)
  • 关键操作:切换到Command Line Pattern标签页,修改默认的命令模板
    • 默认模板大概是:${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
    • 把${FLAGS}移到${INPUTS}后面,改成:${COMMAND} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} ${FLAGS}
  • 点击Apply and Close,然后执行Project > Clean,再重新Build项目

这样修改后,Eclipse生成的编译命令就会把库参数放到源文件后面,和你手动在终端执行的命令顺序一致,就能解决链接错误了。

附你的代码:

#include <iostream>
#include<X11/Xlib.h>
#include "CImg.h"
using namespace cimg_library;
int main() {
 // 读取jpg图像
 CImg<float> imgin("frog.jpg");
 CImg<float> black_white;
 // 对像素(R,G,B值)进行计算
 for(int i=0; i<100; i++)
 for(int j=0; j<10; j++)
 imgin(i,i+j,0) = imgin(i,i+j,1) = imgin(i, i+j, 2) = 0;
 // 写回图像
 imgin.save("frog2.jpg");
 black_white = imgin.get_RGBtoYCbCr().get_channel(0);
 black_white.save("frog3.jpg");
 return(0);
}

以及报错信息:

g++ -O3 -Wall -std=c++11 -lX11 -L/usr/X11R6/lib -lm -pthread -MMD -MP -MF"src/per_iniziare.d" -MT"src/per_iniziare.d" -o "src/per_iniziare.o" "../src/per_iniziare.cpp"
/tmp/cc1l38bP.o: In function cimg_library::CImgDisplay::paint(bool) [clone .part.18]': per_iniziare.cpp:(.text+0x4f2): undefined reference to XPutImage'
per_iniziare.cpp:(.text+0x625): undefined reference to XSendEvent' /tmp/cc1l38bP.o: In function cimg_library::CImgDisplay::move(int, int) [clone .part.142]':
per_iniziare.cpp:(.text+0x101a): undefined reference to `XMoveWindow'

内容的提问来源于stack exchange,提问作者leqo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:49:02