使用CMake链接gegl库报错找不到gegl-0.4、babl-01文件如何解决?
问题根源
你出现链接错误的核心原因有3个:
- 编译参数配置错误
你把库名直接写到了CMAKE_C_FLAGS里:set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lm gegl-0.4 babl-01 "),CMAKE_C_FLAGS是编译阶段的参数配置项,链接库不能写在这里,编译器会把gegl-0.4、babl-01当成输入文件处理,这就是你收到「linker input file not found」报错的直接原因。
同时你后续加的set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lm gegl-0.4 -L /usr/lib64/libgegl-04.so")也存在错误:-L参数后面只能跟库文件搜索目录,不能跟具体的库文件路径,配置完全不生效。 - 库名拼写错误+硬编码路径不规范
你硬编码了库路径target_link_libraries(perspective_lines "/usr/lib64/libgegl-04.so"),官方gegl 0.4版本的库文件名是libgegl-0.4.so,你写的libgegl-04.so少了小数点,大概率你的系统里根本不存在这个文件,自然链接失败。同时硬编码绝对路径的写法不具备可移植性,不是CMake的标准用法。 - 正确的库查找逻辑被注释
你代码里已经写了find_path、find_library查找gegl库的逻辑,但是被你手动注释了,没有生效。
修复方案
1. 删除错误的编译参数配置
删掉所有在CMAKE_C_FLAGS里加库名、库路径的错误配置。
2. 启用并补全库查找逻辑
取消gegl查找逻辑的注释,同时补充babl库的查找逻辑:
# 查找babl库 find_path(LIBBABL_INCLUDE_DIR babl PATH_SUFFIXES babl-0.1) find_library(LIBBABL_LIBRARY NAMES babl-0.1 libbabl-0.1 PATH_SUFFIXES lib) include_directories(${LIBBABL_INCLUDE_DIR}) # 查找gegl库 find_path(LIBGEGL_INCLUDE_DIR gegl PATH_SUFFIXES gegl-0.4) find_library(LIBGEGL_LIBRARY NAMES gegl-0.4 libgegl-0.4 PATH_SUFFIXES lib) include_directories(${LIBGEGL_INCLUDE_DIR})
3. 补充正确的链接依赖
删掉之前硬编码的绝对路径库链接配置,在target_link_libraries里加入查找到的库和数学库m:
target_link_libraries(perspective_lines # 保留你原有的GTK、GIMP相关库配置不变 ${LIBGIMP_WIDGETS_LIBRARY} # 新增以下3个依赖 ${LIBBABL_LIBRARY} ${LIBGEGL_LIBRARY} m )
4. 确认依赖包已安装
如果修改后仍然提示找不到库,先安装对应的开发包:
- SUSE系统执行命令:
zypper install gegl-0_4-devel babl-0_1-devel - Debian/Ubuntu系统执行命令:
apt install libgegl-dev libbabl-dev
内容的提问来源于stack exchange,提问作者david2
相关产品推荐
相关产品推荐

