在 Debian 上编译 CxImage(一个老牌的 C++ 图像处理库)时,有几个常见坑和注意点,下面按「准备 → 编译 → 常见问题」给你梳理一下。
sudo apt update
sudo apt install build-essential g++ make
如果你要用 autotools / cmake,也要装:
sudo apt install cmake
CxImage 不是“一个库”,而是一组模块:
cximage/
├── CxImage/
├── CxImageCrt/
├── jpeg/
├── png/
├── tiff/
├── zlib/
├── jasper/
├── mng/
└── ...
很多子目录是 第三方库源码(jpeg/png/tiff 等),编译方式不统一。
CxImage 官方主要面向 Windows(VC++),Linux 下一般:
MakefileCxImage + jpeg + png)示例最小编译:
g++ -I. -I./CxImage -I./jpeg -I./png \
*.cpp ./jpeg/*.cpp ./png/*.cpp \
-o test_cx
⚠️ 注意:
g++ *.cpp,会重复定义.a 或 .o有些 fork 提供了 CMake:
mkdir build
cd build
cmake ..
make
但原版 CxImage 没有官方 CMake,要小心版本兼容性。
CxImage 早期代码里常写:
#include "CxImage.h"
但在 Linux 上文件名是:
cximage.h
解决:
sed -i 's/CxImage.h/cximage.h/g' *.cpp
或改代码(推荐)
BOOL / TRUE / FALSE 未定义Linux 下没有 Windows 的 windef.h
解决(加在公共头或编译参数):
typedef int BOOL;
#define TRUE 1
#define FALSE 0
或在编译时:
-DBOOL=int -DTRUE=1 -DFALSE=0
min / max 宏冲突CxImage 会用:
std::min / std::max
但老代码直接写 min(a,b),在 GCC 下报错。
解决:
#define NOMINMAX
或改成 std::min
Debian 自带:
libjpeg-dev
libpng-dev
libtiff-dev
强烈建议:
sudo apt install libjpeg-dev libpng-dev libtiff-dev zlib1g-dev
然后只编译 CxImage 核心。
CxImage 很老,建议:
-std=c++98 或 -std=c++11
不要用太新的标准(如 c++20)
✅ 最省事做法:
.a示例:
g++ -c -I. cximage.cpp -o cximage.o
ar rcs libcximage.a cximage.o
说句实话:CxImage 已严重过时(最后更新大约 2013 年)。
在 Debian 上更推荐:
除非你维护老项目,否则不建议新项目用 CxImage。
如果你愿意,可以告诉我:
我可以直接给你一份能编译的 Makefile。