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

将库作为Git子模块引入项目后构建系统找不到引用,原因何在?

解决Git子模块引入libfreedom后链接drm符号失败的问题

问题原因

单独编译libfreedom时仅生成动态库,不会触发依赖符号的链接检查;但将其作为子模块引入主项目后,主程序链接该库时需要解析所有未定义符号,此时就会暴露问题:libfreedom的CMake配置仅添加了libdrm的头文件路径,却未明确链接libdrm库,导致drm相关函数符号无法找到。

解决方案

修改libfreedom目录下的CMakeLists.txt,添加链接libdrm库的配置,让libfreedom自身明确依赖libdrm,CMake会自动将该依赖传递给主项目。

修改后的完整CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(libfreedom LANGUAGES C)

# Specify the C standard
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Add library target
add_library(libfreedom SHARED src/libfreedom.c)

target_include_directories(libfreedom PRIVATE /usr/include/libdrm)
# 新增:链接libdrm库,解决符号未定义问题
target_link_libraries(libfreedom PRIVATE libdrm)

# Prevent it from being called liblibfreedom.so
set_target_properties(libfreedom PROPERTIES
    OUTPUT_NAME "freedom"  # This will create libfreedom.so
)

# Install targets and configuration
install(TARGETS libfreedom DESTINATION lib)
install(FILES include/libfreedom.h DESTINATION include)

主项目的CMakeLists.txt无需修改,重新执行构建即可解决链接错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:05:01