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

如何用CMake编译生成依赖FFmpeg的libiemoji.so动态库?

解决方案

这里是修改后的CMakeLists.txt配置,能够生成名为libiemoji.so的动态链接库:

cmake_minimum_required(VERSION 3.9)
project(iemoji-lab)
set(CMAKE_CXX_STANDARD 14)

# 设置动态库输出目录(如果希望和可执行文件分开存放,也可以改成${CMAKE_CURRENT_SOURCE_DIR}/lib)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

# 生成动态链接库:SHARED指定类型为动态库,iemoji是库名(Linux下会自动生成libiemoji.so)
add_library(iemoji SHARED src/util/util.cpp)

# 链接FFmpeg的avformat库,确保动态库能正确依赖该组件
target_link_libraries(iemoji avformat)

# 可选:添加库版本管理(生成带版本号的符号链接,符合Linux库规范)
set_target_properties(iemoji PROPERTIES
    VERSION 1.0.0
    SOVERSION 1
)

关键修改点说明:

  • 替换生成规则:把原来的add_executable改成add_library(iemoji SHARED ...),SHARED关键字明确告诉CMake要生成动态链接库,库名iemoji会自动适配系统的命名规则(Linux下前缀为lib,后缀为.so)。
  • 调整输出目录:原来的CMAKE_RUNTIME_OUTPUT_DIRECTORY仅针对可执行文件,动态库需要使用CMAKE_LIBRARY_OUTPUT_DIRECTORY来指定输出路径,这里保持和原可执行文件同目录,也可以根据需求改成单独的lib目录。
  • 保留依赖链接:target_link_libraries的逻辑不变,依然需要链接FFmpeg的avformat库,保证动态库运行时能找到依赖。
  • 可选版本配置:添加VERSION和SOVERSION属性后,会生成libiemoji.so.1.0.0(完整版本)和libiemoji.so.1(主版本符号链接),便于后续的版本迭代和兼容。

如果你的库需要对外暴露头文件,还可以添加以下配置,方便其他项目链接时找到头文件:

# 假设头文件存放在src/util目录下
target_include_directories(iemoji PUBLIC src/util)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:50:45