如何用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
相关产品推荐
相关产品推荐

