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

使用CMake编译FCL时libccd依赖无法解析的技术问题

解决FCL无法识别libccd的CMake配置问题

针对你遇到的FCL找不到本地编译的libccd问题,给你几个简单可行的解决办法:

方法1:直接修改FCL的CMakeLists.txt(最直接)

既然你已经通过add_subdirectory(libccd)编译好了libccd,完全不需要FCL再去查找它。直接修改FCL根目录下的CMakeLists.txt:

  1. 找到并注释掉find_package(ccd QUIET)这一行
  2. 强制设置ccd_FOUND为ON,避免FCL跳过相关功能:
    set(ccd_FOUND ON)
    
  3. 确保FCL链接到libccd的目标(如果原来的代码里没有的话):
    target_link_libraries(fcl PUBLIC ccd)
    

这样FCL就能直接使用你已经编译好的libccd了。

方法2:在主CMakeLists里引导FCL找到libccd

libccd编译后会在构建目录下生成ccdConfig.cmake这类配置文件,你只需要在主CMakeLists里告诉FCL这个路径:

add_subdirectory(eigen)
add_subdirectory(libccd)
# 告诉FCL去哪里找libccd的配置文件
set(ccd_DIR ${CMAKE_CURRENT_BINARY_DIR}/libccd)
add_subdirectory(fcl)

${CMAKE_CURRENT_BINARY_DIR}/libccd是libccd的构建输出目录(里面包含cmake配置文件),设置这个变量后,FCL的find_package(ccd QUIET)就能成功找到libccd。

方法3:自定义Findccd.cmake文件(无需修改FCL代码)

如果不想改动FCL的源码,可以自己写一个查找libccd的cmake模块:

  1. 在你的项目根目录创建cmake/modules文件夹
  2. 新建Findccd.cmake文件,内容如下:
    # 查找libccd的库文件和头文件
    find_library(ccd_LIBRARY ccd PATHS ${CMAKE_CURRENT_BINARY_DIR}/libccd)
    find_path(ccd_INCLUDE_DIR ccd/ccd.h PATHS ${CMAKE_CURRENT_SOURCE_DIR}/libccd/src)
    
    if(ccd_LIBRARY AND ccd_INCLUDE_DIR)
        set(ccd_FOUND ON)
        # 创建导入目标供FCL使用
        add_library(ccd UNKNOWN IMPORTED)
        set_target_properties(ccd PROPERTIES
            IMPORTED_LOCATION "${ccd_LIBRARY}"
            INTERFACE_INCLUDE_DIRECTORIES "${ccd_INCLUDE_DIR}"
        )
    endif()
    
  3. 在主CMakeLists.txt开头添加:
    # 让CMake能找到我们自定义的模块
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
    

之后再执行原来的add_subdirectory流程,FCL就能通过这个自定义模块找到libccd了。

优先推荐方法1或方法2,操作更简单,适合CMake新手。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:20:21